Abh*_*hay 28
如果基类析构函数是private或者protected你不能通过delete基类指针调用.
使用受保护的析构函数来防止通过基类指针销毁派生对象.它将对destuctor的访问限制为派生类.它会阻止类库的自动(堆栈)对象.
实际上,它用于允许通过指向base的任何其他多态使用派生类,但不允许用户使用这样的指针进行删除.示例: - 抽象基类/接口.
但是protected,non-virtual析构函数似乎是一个等待发生的错误.假设您没有提供destroy()功能,您必须最终公开dtor.一旦你这样做,你就无法进一步控制这个类,并且如果有人从你的类中进一步派生,那么就冒着使用非虚拟dtor进行多态删除的风险.
Ami*_*hum 19
取自这里:
如果构造函数/析构函数声明为private,则无法实例化该类.
这是事实,但它可以从类中的另一个方法实例化.类似地,如果析构函数是private,那么该对象也只能从类内部删除.此外,它可以防止继承类(或者至少阻止继承的类被实例化/销毁).
下面这段代码会导致编译错误(VC2010):C2248:'base :: ~base':无法访问类'base'中声明的私有成员
class base
{
~base(){}
};
class derived : public base
{
};
int main ()
{
derived* d = new derived;
delete d;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您更改要保护的基础析构函数,一切正常.
答案是你的假设是错误的.当私有时,不能调用基类析构函数.
| 归档时间: |
|
| 查看次数: |
34690 次 |
| 最近记录: |