为什么boost :: noncopyable需要继承

Mar*_*ing 26 c++ boost noncopyable

将任何不可复制的成员添加到类将阻止自动生成复制构造和赋值运算符.为什么boost需要继承才能使用noncopyable?

我想我并不孤单

class MyUtility : public MyBase
{
   noncopyable guard;
   ...
};
Run Code Online (Sandbox Code Playgroud)

而不是

class MyUtility : public MyBase , private noncopyable
{
   ...
};
Run Code Online (Sandbox Code Playgroud)

戴夫亚伯拉罕是一个聪明人,所以他可能考虑过这种可能性.我错过了什么?遗产成就了什么?

Umm*_*mma 33

因为sizeof(boost::noncopyable)!=0.所以在这种情况下,你的班级规模会更大.

在这里,您可以阅读空基优化.(请参阅"4.7:空成员优化"部分).

编辑:事实上,noncopyable没有公共构造函数使得它对任何其他用途都没用,而具有公共构造函数的类也可能用于其他错误的目的.这是另一个原因,为什么加速选择这种方法.

  • 强制引用"空基优化"允许编译器为那些不理解答案的人:) (4认同)

Phi*_*ipp 23

如果可以noncopyable用作成员,则需要公共默认构造函数和析构函数.然后人们可以创建实例,noncopyable甚至将其用作多态基类,而不使用析构函数.没有任何公共成员的实现只是确保它仅用作策略类.

  • 我认为这是正确的答案,而不是关于EBO的答案. (3认同)