例如:
class Foo : boost::noncopyable
{
// ...
};
class Bar : public Foo
{
// ...
};
Bar
是否不可复制?
答案 0 :(得分:8)
默认情况下,它是不可复制的,除非您创建自定义复制构造函数并避免在那里调用基本复制构造函数。
另见C ++ 11中引入的Explicitly-defaulted and deleted special member functions。即使使复制构造函数/运算符私有解决了问题,编译器也会生成一个远非美观且明显的诊断消息,因此在C ++ 11中存在已删除的复制构造函数/运算符来解决此问题。
答案 1 :(得分:2)
假设派生类没有自定义拷贝构造函数,避免调用不可复制的拷贝构造函数,那么是。在所有级别,boost::noncopyable
的所有派生类都是不可复制的。由于派生类的对象还包含boost::noncopyable
的子对象non-copyable
,这意味着在没有基类可复制的情况下,任何派生类都不可复制,
答案 2 :(得分:1)
Bar
派生自boost::noncopyable
(即使它不是直接继承),所以是的。
答案 3 :(得分:1)
是的,如果它是可复制的,那么所有基类必须是可复制的,但boost :: noncopyable是不可复制的