在C++中,protected和private析构函数有何区别?如果基类的析构函数是private的,我想当删除派生类对象时它仍然会被调用。
在C++中,protected和private析构函数有何区别?如果基类的析构函数是private的,我想当删除派生类对象时它仍然会被调用。
引用自这里:
如果构造函数/析构函数被声明为private,则该类无法实例化。
尽管如此,该类可以从类中的另一个方法中实例化。同样,如果析构函数是private
,那么对象也只能在类内部删除。此外,它防止了该类被继承(或者至少防止继承类被实例化/销毁)。
new
创建一个有私有析构函数的类,但是你不能在成员函数和友元函数之外使用 delete
删除它。 - Thomas Eding以下代码会导致编译器错误(VC2010):C2248: 'base::~base' : 无法访问类“base”中声明的私有成员。
class base
{
~base(){}
};
class derived : public base
{
};
int main ()
{
derived* d = new derived;
delete d;
}
然而,如果你将基类析构函数改为protected(受保护的),一切都能正常工作。