【发布时间】:2011-09-14 11:17:36
【问题描述】:
假设我有一个 ABC* 类型的指针和另一个 XYZ* 类型的指针,它们都派生自一个公共父类。
如果我通过显式转换将 XYZ* 分配给 ABC*,那么如果我调用
会发生什么删除 abc; // abc 是 XYZ* 类型的
我会得到任何异常还是可以正常工作?
我已经尝试了上面的代码,它没有崩溃。那么谁能告诉我在什么情况下会删除抛出异常/故障/崩溃等?
删除指针会导致程序崩溃的情况有哪些?如果它们都定义了自定义析构函数,它们会崩溃吗
编辑:这是我的测试代码,没有任何崩溃
class ABC
{
public:
int a;
int b;
int c;
};
class XYZ
{
public:
double a;
double b;
double c;
};
int main()
{
ABC* abc = new ABC();
XYZ* xyz = (XYZ*)abc;
delete xyz;
return 0;
}
P.S:我在 Windows 平台上,如果有帮助的话。
EDIT2:好的,所以在读数之后,我将我的问题更改为,何时删除指针会导致崩溃(不包括未定义的行为)?
EDIT3: 调用 delete 时会发生什么?将调用谁的析构函数?
【问题讨论】:
-
未定义的行为是导致崩溃的一种可能原因,无论是立即还是有时稍后。或者它可能看起来仍然有效!
标签: c++ pointers delete-operator