всякий раз, когда вы вызываете функцию (пример: int f (car c)), которая принимает свои аргументы, отличные от встроенных типов данных (здесь car), требование скопировать фактический объект, предоставленный вызывающей стороной, в переменную в вызываемомпараметр функции.
пример: car carobj;f (carobj);
, то есть копировать carobj в c.
carobj необходимо скопировать в параметр c в функции f.
Для копирования необходимо создать конструктор копированияназывается.
В этом случае функция f вызывается с использованием передачи по значению или, другими словами, объявляется, что функция f принимает передачу по значению.
Если функция f принимает передачу по ссылке, то ее объявлениеint f (car & c);
В этом случае car carobj;F (carobj);не нуждается в конструкторе копирования.
В этом случае c становится псевдонимом carobj.
Используя вышеупомянутые 2 сценария, для вашей ясности я суммирую их как: 1. Если объявленная функциячтобы принять параметр в качестве значения объекта, вызывается конструктор копирования объекта.2. Если функция, объявленная для передачи параметра в качестве передачи по ссылке, параметр становится псевдонимом объекта, предоставленного вызывающей стороной.Нет необходимости в конструкторе копирования!
Теперь вопрос в том, почему требуется передача по ссылке.Если конструктор копирования принимает ссылку, получающая переменная становится псевдонимом предоставленного объекта.Следовательно, нет необходимости в конструкторе копирования (в данном случае, вызове самого себя) для копирования значения в предоставленном вызывающем объекте для копирования переменной конструктора в списке аргументов.
В противном случае, если конструктор копирования принимает предоставленный вызывающим объектом объект как значение, то есть передает значение, то ему необходим конструктор копирования данного объекта;Следовательно, чтобы получить предоставленный объект от вызывающей стороны в нашу функцию (в данном случае, конструктор копирования), нам нужно вызвать конструктор копирования, который является ничем иным, как вызовом той же функции во время самой инициализации параметра функции.Это причина передачи ссылки на конструктор копирования.