LINUX.ORG.RU

С++, я нуб. Возврат локального объекта класса из функции.

 


0

2

Везде пишут что при возврате локального объекта класса из функции создается промежуточный временный объект который потом и копируется как возвращаемое значение. Как я понимаю получается три объекта, на пример при коде

A func()
{
    A a;
    return a;
}

int main()
{
   A a;
   a = func();
}
первый объект это а из func(), второй это a из main() и третий это временный объект возвращающийся из func(). Так? Но я перегрузил конструкторы по умолчанию и копирования, operator= и деструктор поместив в них выводы сообщения и при исполнении кода получил сообщения только от конструктора по умолчанию a из main, а из func(), operator= для а из main, и деструктора a из main(). А где же промежуточный временный объект? Благодарю.

RVO. Только деструктор должен был вызваться два раза, если остальное правильно описал.

const86 ★★★★★ ()

Более того, в func() и в operator=() я вывел на экран адреса объектов и они совпали.

normann ★★ ()
Ответ на: комментарий от normann

В общем случае — называется «copy elision» (http://en.cppreference.com/w/cpp/language/copy_elision).

Это единственная оптимизация, которой позволено менять поведение программы (скипать конструктор копирования / оператор присваивания даже тогда, когда они имеют побочные эффекты).

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.