将任何不可复制的成员添加到类中将阻止自动生成复制构造和赋值运算符。为什么boost需要继承才能使用不可复制?
我想我不是唯一一个在风格上偏爱
class MyUtility : public MyBase
{
noncopyable guard;
...
};
而不是
class MyUtility : public MyBase , private noncopyable
{
...
};
戴夫·亚伯拉罕是个聪明人,所以他可能考虑过这种可能性。我遗漏了什么?继承完成了什么?
发布于 2011-01-28 23:12:29
因为sizeof(boost::noncopyable)!=0
。所以在这种情况下,你的班级规模将会更大。
Here你可以读到关于空基优化的内容。(参见"4.7:空成员优化“一节)。
编辑:事实上,不可复制没有公共构造函数,这使得它对任何其他用途都没有用处,而具有公共构造函数的类也可能被用于其他错误的目的。这是boost选择这种方法的另一个原因。
发布于 2011-01-28 23:29:14
如果您可以使用noncopyable
作为成员,那么它将需要一个公共的默认构造函数和析构函数。然后,人们可以创建noncopyable
的实例,甚至可以将其用作多态基类,而不需要析构函数是虚拟的。没有任何公共成员的实现只是确保它仅用作策略类。
发布于 2011-01-29 00:05:10
就我个人而言,我更喜欢boost语法。继承是一种向整个类添加某些属性或特性的方法,而不可复制就是这样一种特性。不可复制的成员看起来很棘手(实际上你不想添加任何成员,这是一个技巧)。继承被精确地用于它的设计目的。
https://stackoverflow.com/questions/4829696
复制相似问题