首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >像NonCopyable和NonMovable这样的接口应该提供虚拟析构函数吗?

像NonCopyable和NonMovable这样的接口应该提供虚拟析构函数吗?
EN

Stack Overflow用户
提问于 2014-04-14 13:53:15
回答 3查看 188关注 0票数 0

像NonCopyable和NonMovable这样的接口是否应该提供虚拟析构函数,只需要声明析构函数是受保护的?

我无法想象有人想要将对象存储为不可复制/不可移动,并以这样的多态方式使用它们。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-14 13:57:01

使用C++11,您可以删除构造函数和析构函数,从而使许多NonCopyable / NonMovable成语过时:

代码语言:javascript
复制
YourClass() = delete; /*deletion of default constructor*/
YourClass(const YourClass&) = delete; /*deletion of copy constructor*/
~YourClass() = delete; /*deletion of the destructor of YourClass*/

等等,如果有任何代码需要这些代码,则会出现编译时失败。

票数 1
EN

Stack Overflow用户

发布于 2014-04-14 13:56:07

没有不可复制的基不需要虚拟析构函数。但是是的,扩展这种不可复制的类可能需要虚拟析构函数。

如果使用boost,则可以从noncopyable.hpp继承

票数 2
EN

Stack Overflow用户

发布于 2014-04-14 14:10:24

NonCopyable和NonMovable具有正交性和多态性。

那么,为什么不应该有人想要混合和匹配的任何组合?

无论如何,避免这个问题的正确方法是声明那些类析构函数是受保护的,并且只继承它们私有。尼尔·柯克说得对。

此外,由于C++11,您可以显式声明任何您想要删除的函数,这是首选的方法。

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

https://stackoverflow.com/questions/23061995

复制
相关文章

相似问题

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