Конструктор копирования, Глубокая копия, Справочник по константе

Конструктор копирования, Глубокая копия, Справочник по константам

Q. С точки зрения управления памятью.

Конструктор копирования для класса A имеет вид A (const A& а)
Почему параметр передается по ссылке?
Объясните, почему мы не можем определить конструктор вида A (A a)

Ответ.
Три причины, почему мы делаем это:

  1. Ссылка на константу при передаче объекта в качестве параметра более эффективна
  2. Если мы передадим A (A a) без модификатора const, объект, который не должен быть изменен, может быть изменен по ошибке
  3. Мы делаем так, чтобы мы могли сделать Deep Copy

Эти три причины верны?

Пожалуйста, дайте мне знать.
Спасибо,

1

Решение

A(A a)

нужно будет сгенерировать копию a так как он передается по значению. Поэтому нам нужно вызвать конструктор копирования, чтобы сделать копию. Однако в этом случае конструктор копирования не был определен, вы не можете создать копию a, так что это должно быть передано по ссылке.

У нас есть формат:

 A(const A& a)

Обратите внимание: ссылка на константу фактически является ссылкой на константу. Это означает, что мы передаем объект A по ссылке, и мы не должны менять a при создании копии a,

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]