【发布时间】:2012-02-16 17:36:24
【问题描述】:
/*Child is inherited from Parent*/
class Parent {
public:
Parent () //Constructor
{
cout << "\n Parent constructor called\n" << endl;
}
protected:
~Parent() //Dtor
{
cout << "\n Parent destructor called\n" << endl;
}
};
class Child : public Parent
{
public:
Child () //Ctor
{
cout << "\nChild constructor called\n" << endl;
}
~Child() //dtor
{
cout << "\nChild destructor called\n" << endl;
}
};
int main ()
{
Parent * p2 = new Child;
delete p2;
return 0;
}
如果我将Parent 的析构函数设为虚拟,那么我会得到一个错误,那么将受保护的析构函数设为虚拟的目的是什么?
【问题讨论】:
-
也许我们应该从“为什么要保护 dtor?”开始。
-
你为什么想让析构函数虚拟化? 你不应该知道目的吗?受保护的析构函数意味着不应该通过基指针来破坏对象,因此
main中的代码是完全错误的。 -
我了解虚拟 dtor 和受保护 dtor 的使用,但我看到了一些带有虚拟受保护 dtor 的代码。我不明白的是,当两者都使用时会产生什么效果?
-
@CatPlusPlus:通过使 dtors 受到保护,您将防止在堆栈上创建基类对象。我有仪式吗?
标签: c++ inheritance protected virtual-destructor