Название: Возврат объекта Отправлено: blood_shadow от Май 16, 2011, 12:39 Даж стыдно за такой вопрос, но надо восполнить пробелы в знаниях..
Допустим есть объект: Код где MessageHeader и MessageBody - структуры, конструктор Message(const MessageHeader &header, const MessageBody &body) - делает просто инициализацию header и body Допустим есть метод: Код
я так понимаю в этом случае будет создан временный объект с помощью конструктора копирования для объекта message, и ретурн возвратит именно этот временный объект а если сделать так: Код
то возвратиться сразу временный объект без конструктора копирования? то есть такой способ более экономичен? Спасибо Название: Re: Возврат объекта Отправлено: Igors от Май 16, 2011, 12:51 Это тесно связано с де-факто оптимизацией и зависит от того как ф-ция вызывается
Код
Даж стыдно за такой вопрос, но надо восполнить пробелы в знаниях.. Стыдиться совершенно нечегоНазвание: Re: Возврат объекта Отправлено: blood_shadow от Май 16, 2011, 13:09 Это тесно связано с де-факто оптимизацией и зависит от того как ф-ция вызывается насчет присваивания эт понятно, а насчет вызова ф-ции someMethod() в первом варианте ф-ции будет вызван: конструктор + конструктор копирования, а во втором только конструктор(для возврата имеется ввиду)? Название: Re: Возврат объекта Отправлено: Igors от Май 16, 2011, 13:22 насчет присваивания эт понятно, а насчет вызова ф-ции someMethod() в первом варианте В первом варианте будет вызван только один конструктор и все (независимо от того куда Вы его воткнули внутри метода) - в этом смысл оптимизацииф-ции будет вызван: конструктор + конструктор копирования, а во втором только конструктор(для возврата имеется ввиду)? Название: Re: Возврат объекта Отправлено: Авварон от Май 16, 2011, 13:23 По стандарту вроде как в любом случае дожен вызываться конструктор копирования, но во втором примере все компиляторы действительно оптимизируют объект, созданный в ретурне.
|