下面的这个例子说明了如何防止派生类被复制。它基于声明了复制构造函数和复制赋值运算符的基类private
。
class Uncopyable
{
protected:
// allow construction and destruction of derived objects...
Uncopyable() {}
~Uncopyable() {}
private:
// but prevent copying...
Uncopyable(const Uncopyable&);
Uncopyable& operator=(const Uncopyable&);
};
我们可以使用这个类,结合私有继承,使类不可复制:
class derived: private Uncopyable
{...};
请注意,类中的析构函数Uncopyable
未声明为virtual.
以前,我了解到
- 基类中的析构函数应该是
virtual
. - 不应该在非基类中使用析构函数
virtual
。
在这个例子中,析构函数Uncopyable
is not virtual
,但它被继承自。这似乎与我之前学到的智慧背道而驰。
何时以及为什么不应将基类中的析构函数定义为virtual
?