Скопировать конструктор, определить и объявить разницу?

У меня есть класс Base и класс производного.

  1. Если я объявлю конструктор копирования в своем классе, будет ли компилятор определять конструктор копирования при компиляции?
  2. Что произойдет, если будет вызван конструктор копирования класса Derived? Зависит ли это от конструктора копирования Базового класса?

(Мне нужно знать отношение между базовым классом и производным с точки зрения конструктора копирования во время стандартной компиляции. Что делает и как компилятор определяет конструктор копирования)

1

Решение

Если я объявлю конструктор копирования в своем классе, будет ли компилятор определять конструктор копирования при компиляции?

Нет, не будет.

Если вы просто объявите конструктор копирования и не определите его, вы получите ошибку компоновки. Предоставляя явное объявление для конструктора копирования, вы сообщаете компилятору, что неявно сгенерированного не достаточно для ваших нужд, и даете обещание, что вы предоставите свою собственную версию. Но когда вы не даете определение, вы нарушаете это обещание.

Что произойдет, если будет вызван конструктор копирования класса Derived? Зависит ли это от конструктора копирования Базового класса?

Наличие или отсутствие конструктора копирования в базовом классе не влияет на конструктор копирования в производном классе. Правила просты:
Компилятор генерирует конструктор копирования для вашего класса, если вы не предоставите явное объявление. Обратите внимание, что компилятор делает это, только если ваш код использует конструктор копирования. Если компилятор обнаружит, что ваш код никогда не использует конструктор копирования, он не будет генерировать конструктор копирования просто потому, что это ненужные накладные расходы и нарушает фундаментальное правило C ++, «Вы платите только за то, что используете»

2

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

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

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