Конструктор копирования в наследуемом классе
Запутался с наследованием и конструкторами. Как я понимаю, что наследование конструкторов в с++ не происходит, кроме базового.Но вот попался пример ,где чтобы запретить копирование предлагают наследоваться от такого класса:
class NonCopyable
{
public:
NonCopyable (const NonCopyable &) = delete;
NonCopyable & operator = (const NonCopyable &) = delete;
protected:
NonCopyable () = default;
~NonCopyable () = default; /// Protected non-virtual destructor
};
class CantCopy : private NonCopyable
{};
И тогда копирование будет запрещено, но разве у нас должно происходить наследование этого конструктора, если он с параметром?
NonCopyable (const NonCopyable &) = delete;
Ответы (1 шт):
Наследование конструкторов в С++ может быть только явным. И конструктор по-умолчанию не исключение. В приведенном примере никакого наследования конструкторов не происходит. В данном случае компилятор создает для класса CantCopy конструктор по-умолчанию, в котором вызывается конструктор по-умолчанию базовых подъобъектов и полей. Такой конструктор без проблем корректно создается. А вот при попытке аналогичным образом сгенерировать конструктор копирования компилятор постигнет фиаско, так как конструктор копирования базового класса отмечен как запрещенный.