Const ссылка на временный - PullRequest
       15

Const ссылка на временный

9 голосов
/ 17 апреля 2009

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

Вот мой код:

#include <iostream>

using namespace std;

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

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

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

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

1 Ответ

24 голосов
/ 17 апреля 2009

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

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

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

...