Конструктор копирования, Глубокая копия, Справочник по константам
Q. С точки зрения управления памятью.
Конструктор копирования для класса A имеет вид A (const A& а)
Почему параметр передается по ссылке?
Объясните, почему мы не можем определить конструктор вида A (A a)
Ответ.
Три причины, почему мы делаем это:
Эти три причины верны?
Пожалуйста, дайте мне знать.
Спасибо,
A(A a)
нужно будет сгенерировать копию a
так как он передается по значению. Поэтому нам нужно вызвать конструктор копирования, чтобы сделать копию. Однако в этом случае конструктор копирования не был определен, вы не можете создать копию a
, так что это должно быть передано по ссылке.
У нас есть формат:
A(const A& a)
Обратите внимание: ссылка на константу фактически является ссылкой на константу. Это означает, что мы передаем объект A
по ссылке, и мы не должны менять a
при создании копии a
,
Более важная вещь, которую конструктор копирования принимает константную ссылку, заключается в том, что временный объект не может связываться с неконстантной ссылкой. Следовательно, конструктор копирования должен иметь ссылку на const-объект, чтобы иметь возможность делать копии временных объектов.
Других решений пока нет …