Re: конструктор копирования
От: rm822 Россия  
Дата: 24.07.10 07:45
Оценка:
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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.