TER*_*ytE 8 c++ boost noncopyable
我对以下代码有疑问:
class MyClass : private boost::noncopyable
{
public:
MyClass() {}
virtual ~MyClass() {}
}
class OtherClass : private boost::noncopyable
{
private:
MyClass* m_pMyClass;
}
Run Code Online (Sandbox Code Playgroud)
我的想法是MyClass无法使用构造或赋值进行复制.如果我想支持从MyClass派生类,我需要使用虚拟析构函数,我不想支持.我不打算创建指向这个类的指针并传递它们.
我不想要一个Singleton,我看不出去除虚拟析构函数的缺点.
如果删除不可复制类的虚拟析构函数,是否会引入潜在问题?是否有更好的实践来处理不需要单例的类,但我只想在另一个类中有一个实例而不支持继承?
一般规则是,如果您的类具有虚函数,则需要虚拟析构函数.如果它没有,但仍然是从基类派生的,那么基类(以及你的类)可能需要也可能不需要虚拟析构函数.
从中boost::noncopyable派生类并不真正算作从基类派生. boost::noncopyable更像是一个方便的注释备份了几个声明,这些声明将导致编译器强制执行注释.它不是任何传统意义上的基类.没有人会尝试传递指向您的类的指针作为指针或引用boost::noncopyable.即使他们做了你的虚拟析构函数也无济于事,因为boost::noncopyable析构函数不是.
最后,正如评论中指出的那样,你甚至是私下继承的,boost::noncopyable所以就课堂外的任何人而言,它甚至都不是真正的继承.
所以真的,不需要让它成为虚拟析构函数.
| 归档时间: |
|
| 查看次数: |
3263 次 |
| 最近记录: |