首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么boost::noncopyable需要继承

为什么boost::noncopyable需要继承
EN

Stack Overflow用户
提问于 2011-01-28 23:07:15
回答 6查看 4.6K关注 0票数 26

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

我想我不是唯一一个在风格上偏爱

代码语言:javascript
运行
复制
class MyUtility : public MyBase
{
   noncopyable guard;
   ...
};

而不是

代码语言:javascript
运行
复制
class MyUtility : public MyBase , private noncopyable
{
   ...
};

戴夫·亚伯拉罕是个聪明人,所以他可能考虑过这种可能性。我遗漏了什么?继承完成了什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-01-28 23:12:29

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

Here你可以读到关于空基优化的内容。(参见"4.7:空成员优化“一节)。

编辑:事实上,不可复制没有公共构造函数,这使得它对任何其他用途都没有用处,而具有公共构造函数的类也可能被用于其他错误的目的。这是boost选择这种方法的另一个原因。

票数 33
EN

Stack Overflow用户

发布于 2011-01-28 23:29:14

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

票数 23
EN

Stack Overflow用户

发布于 2011-01-29 00:05:10

就我个人而言,我更喜欢boost语法。继承是一种向整个类添加某些属性或特性的方法,而不可复制就是这样一种特性。不可复制的成员看起来很棘手(实际上你不想添加任何成员,这是一个技巧)。继承被精确地用于它的设计目的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4829696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档