Вопрос

После прочтения эта статья в блоге Херба Саттера я немного поэкспериментировал и столкнулся с кое-чем, что меня озадачило.Я использую Visual C ++ 2005, но я был бы удивлен, если бы это зависело от реализации.

Вот мой код:

#include <iostream>

using namespace std;

struct Base {
    //Base() {}
    ~Base() { cout << "~Base()" << endl; }
};

int main()
{
    const Base & f = Base();
}

При запуске он отображает "~Base()" дважды...Но если я отменяю комментирование конструктора, он отображает его только однажды!

У кого-нибудь есть объяснение этому?

Это было полезно?

Решение

Это зависит от реализации.

Стандарт допускает копирование при привязке временной ссылки к постоянной.В вашем случае VC ++ выполняет копирование только тогда, когда конструктор неявно определен.Это неожиданно, но допустимо.

C++1x исправит это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top