【发布时间】:2011-05-09 20:56:35
【问题描述】:
[第二次讨论] 嗨,大家好!你们都在谈论虚拟析构函数。 我还考虑了基类的析构函数。 但另一个测试是这样的: A级 { 民众: 一种() { } 虚空乐趣() { } 私人的: 诠释mIntA; };
当 A 类有一个虚拟函数(不是虚拟目标函数)时, 没关系。删除ptrA就OK了!
所以,我认为 A 只需要一个 vptr 来激活多态。不是A类s
destructor must be virtual.
Class As析构函数不是虚拟的就可以使资源不被释放
正确。
class A
{
public:
A()
{
}
/*virtual*/ ~A()
{
}
private:
int mIntA;
};
class B : public A
{
public:
B()
{
mIntB = 1234;
}
virtual ~B()
{
int i = 0;
}
private:
int mIntB;
};
我有一个 A 类。还有一个从 A 派生的 B 类; A 没有任何虚函数。 所以当我这样做时:
A* ptrA = new B;
delete ptrA;
它崩溃了!
但是当给 A 添加一个虚拟的乐趣时,没关系。 我们知道,ptrA 是一个 B 对象。 但这是为什么呢?
【问题讨论】:
-
it crashes!因为未定义的行为意味着任何事情都可能发生。 -
基本上,您不了解虚拟析构函数以及为什么需要在基类中使用它们。人们所说的完全重复的问题并不完全正确。但它的所有答案都会回答你的问题。
标签: c++