Конструктора копии в C++ вызывают, когда объект возвращается из функции?

Вы можете использовать статическую переменную:

static const std::vector<ClassA> empty;
return empty;
25
задан Mohamad-Jaafar NEHME 30 May 2016 в 23:35
поделиться

4 ответа

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

В случае глубокого копирования пользовательского конструктора все одинаково. Сначала выделяется память для объекта, который будет служить результатом, затем вызывается конструктор копирования. Он использует переданную ссылку для доступа к локально определенному объекту и копирования того, что необходимо для нового объекта.

17
ответ дан sharptooth 28 November 2019 в 21:35
поделиться

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

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

12
ответ дан unwind 28 November 2019 в 21:35
поделиться

Согласно ответу на мой вопрос, конструктор копирования может быть вызван даже дважды: один раз для копирования локального объекта в возвращаемый «объект» и один раз для копирования вернуть объект в переменную, которой он был назначен.

Однако, не должно быть ! Компилятор может оптимизировать обе конструкции копирования.

5
ответ дан Community 28 November 2019 в 21:35
поделиться

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

0
ответ дан Lou Franco 28 November 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: