return и конструктор копирования
Я всегда считал, что когда функция возвращает во вне автоматическую переменную по значению (не ссылкой!) при помощи оператора return, то вызывается некий механизм копирования. Соответственно возврат в вызывающий код экземпляра класса должен провоцировать вызов его конструктора копирования.
Однако если запустить этот код: Код:
#include <conio.h> Рассмотрим детальней: foo a; вызов конструктора по умолчанию foo b=a; вызов конструктора копирования a=b; вызов оператора "=" тут всё логично, но далее: foo c=help_function(a); вызов конструктора по умолчанию дважды (внутри функции поддержки), один (!) вызов деструктора и всё - далее реакция уже на следующие инструкции b=help_function(a); вызов конструктора дважды, один деструктор, вызов оператора = и ещё одного деструктора Это шо жа - получается, конструкция: Код:
foo c=help_function(a); Причём в случае: Код:
b=help_function(a); А печалит здесь только одно - к.к. не вызывается. Быть может зависит от настроек компилятора (gcc)? Пользователи студии отпишитесь, пожалуйста! |
Ответ: return и конструктор копирования
debug:
Цитата:
вроде все правильно. |
Ответ: return и конструктор копирования
Вот у холи так, как я ожидал - а вот что у меня:
Цитата:
|
Ответ: return и конструктор копирования
нет. это RVO
в релизе у меня тоже так |
Ответ: return и конструктор копирования
а у меня и в debug
|
Часовой пояс GMT +4, время: 01:05. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot