return SomeClass()
От: Init64  
Дата: 16.02.06 17:59
Оценка:
class TestClass
{
public:
    TestClass() { std::cout << "TestClass()" << std::endl; }
    ~TestClass() { std::cout << "~TestClass()" << std::endl; }

    TestClass& operator << (int i) { std::cout << "<< " << i << std::endl;  return *this; }
};

TestClass TestFunc()
{
    return TestClass();
}
int main()
{
    TestFunc() << 100 << 200;
}


Вопреки своим ожидания, вижу на консоли следующие строки:
TestClass()
<< 100
<< 200
~TestClass()

В моем представлении все должно отработать так:

1) return создает локальный экземпляр внутри TestFunc()
2) Далее он делает копию экземпляра, которая уже попадает в область видимости main()
3) Для локального объекта при выходе из TestFunc() вызывается деструктор ~TestFunc()
4) Для созданной копии срабатывает оператор <<

Те сначала должен отработать деструктор, и только потом <<. На консоли ожидал увидеть следующее:

TestClass()
~TestClass()
<< 100
<< 200


Как это работает на самом деле?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.