7

例如:

class Foo : boost::noncopyable
{
    // ...
};

class Bar : public Foo
{
    // ...
};

Bar不可复制吗?

4

4 回答 4

8

默认情况下,它是不可复制的,除非您创建自定义复制构造函数并避免在那里调用基本复制构造函数。

另请参阅C++11 中引入的显式默认和删除的特殊成员函数。尽管将复制构造函数/操作符设为私有可以解决问题,但编译器会生成一个远非漂亮和明显的诊断消息,因此在 C++11 中删除了复制构造函数/操作符来解决此问题。

于 2011-07-28T18:32:55.603 回答
2

假设派生类没有自定义复制构造函数来避免调用不可复制的复制构造函数,那么是的。在所有级别上,所有派生类boost::noncopyable都是不可复制的。由于派生类的对象还包含其子对象boost::noncopyableis non-copyable,这意味着如果基类不可复制,则任何派生类都不能复制,

于 2011-07-28T18:32:29.757 回答
1

Bar派生自boost::noncopyable(即使它不是直接继承),所以是的。

于 2011-07-28T18:33:28.290 回答
1

是的,如果它是可复制的,那么所有基类都必须是可复制的,但是 boost::noncopyable 是不可复制的

于 2011-07-28T18:34:15.540 回答