Что произойдет (точно), если вы пропустите конструктор копирования в классе C ++? - PullRequest
5 голосов
/ 27 февраля 2011

Что произойдет (точно), если вы пропустите конструктор копирования в классе C ++?

Является ли класс просто memcpy'd или скопированный член мудрым?

Ответы [ 4 ]

8 голосов
/ 27 февраля 2011

Класс копируется по элементам.

Это означает, что вызываются конструкторы копирования всех членов.

1 голос
/ 27 февраля 2011

Конструктор копирования по умолчанию сделан по-английски.

Такой же подход по элементам также используется для создания оператора присваивания;однако оператор присваивания не создается, если у класса есть ссылочные члены (поскольку невозможно перепривязать ссылку после построения).

0 голосов
/ 27 февраля 2011

Обратите внимание, что при копировании по элементам, если вы выделили какую-либо память, ваши структуры данных будут распределять эту выделенную память - поэтому важно, если вы хотите создать глубокую (независимую) копию данных для создания копииконструктор для структур, которые выделяют память.Если ваша структура не выделяет память, она вряд ли действительно потребует конструктора копирования.

Однако, если вы реализуете конструктор копирования, не забывайте Правило трех : копияконструктор, оператор присваивания, деструктор.Если один реализован, все три должны быть реализованы.

С уважением,Деннис М.

0 голосов
/ 27 февраля 2011

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

...