Является ли копирование автоматически запрещенным в классах, полученных из классов, полученных из Boost, без возможности копирования?
Например:
class Foo : boost::noncopyable
{
// ...
};
class Bar : public Foo
{
// ...
};
Является Bar
без копируемого?
4 ответа
По умолчанию он не подлежит копированию, если только вы не создадите пользовательский конструктор копирования и не вызовете там базовый конструктор копирования.
См. Также Явные дефолтные и удаленные специальные функции-члены, представленные в C++11. Несмотря на то, что создание конструктора / оператора копирования private решает проблему, компилятор генерирует диагностическое сообщение, которое далеко не красиво и очевидно, поэтому конструкторы / операторы удаленного копирования существуют в C++ 11 для решения этой проблемы.
Предполагая, что производный класс не имеет собственного конструктора копирования, который избегает вызова не копируемого конструктора копирования, тогда да. На всех уровнях все производные классы boost::noncopyable
будет не для копирования. Как объект производного класса также содержит подобъект boost::noncopyable
который non-copyable
это означает, что ни один производный класс не может быть скопирован без возможности копирования базового класса,
Да, если бы он был копируемым, тогда все базовые классы должны быть копируемыми, но boost::noncopyable не копируется
Bar
происходит от boost::noncopyable
(хотя это не прямое наследство), так что да.