Почему вы должны объявить конструктор копирования? - PullRequest
0 голосов
/ 24 июня 2019

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

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

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

Это не так.

Если у вас нет специальной логики для выполнения в конструкторе копирования, вам не нужно предоставлять ее, а это просто шум.

Если вы это сделаете, то, очевидно, вам придется написать этот код, предоставив свой собственный конструктор копирования.


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

Но если это когда-либо произойдет, это почти наверняка произойдет, потому что вы изменили или добавили некоторые элементы данных, поэтому вам все равно придется изменить заголовок. И, честно говоря, такое существенное изменение семантики класса в любом случае требует некоторого осторожного взгляда. Я не вижу преимущества в том, чтобы сделать код настолько подробным, насколько это возможно, просто ради внесения изменений, которые не должны быть полностью прозрачными, прозрачными.

0 голосов
/ 25 июня 2019

Конструктор копирования необходим, когда объект имеет динамическое распределение памяти.По умолчанию компилятор c ++ создает конструктор копирования, поэтому, когда у вас нет указателя и т. Д., Вам не нужно определять конструктор копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...