H>В момент создания объекта one происходит вызов функции, в которой создается объект. Собственно в чем заключается вопрос, конструктор вызывается только для локального объекта в функции func(). но для объекта one конструктор копирования не вызывается,почему ? Вроде бы это называется "оптимизацией возвращаемого значения", но все равно до конца непонятно что именно происходит при создании объекта в главной функции main().
на самом деле происходи примерно так
void func( Test* addressOnTheStack)
{
new(addressOnTheStack)Test("test func");
return;
)
RVO\NRVO применяется если возвращаемый объект один и тот же
если их будет несколько, то компилер просто не знает какую из локальных переменных соптимизировать
например так
Test func()
{
Test obj("test func");
Test obj2("test func2");
return rand() > 2 ? obj : obj2;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>