1 c++ pointers delete-operator
假设我有ABC*类型的指针和另一个XYZ*类型的指针,它们都来自一个公共父类.
如果我通过显式地将XYZ*分配给ABC*,那么如果我打电话会发生什么
删除abc; // abc的类型为XYZ*
我会得到任何例外或它会正常工作吗?
我已经尝试了上面的代码,它不会崩溃.那么有谁能告诉我在什么情况下会删除抛出异常/故障/崩溃等?
delet'ing指针崩溃程序的情况是什么?如果它们都定义了自定义析构函数,它们会崩溃吗?
编辑:这是我的测试代码,没有任何崩溃
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;
}
Run Code Online (Sandbox Code Playgroud)
PS:我在Windows平台上,如果有帮助的话.
EDIT2:好的,所以在阅读之后,我将问题改为,何时删除指针会导致崩溃(不包括未定义的行为)?
编辑3:调用删除时会发生什么?会叫谁的析构函数?
这是非法的.如果要在非数组删除表达式中删除的指针类型与要删除的对象的动态类型不同,则指向对象的类型必须是要删除的对象的基类,并且基类必须具有一个虚拟的析构函数.
见ISO/IEC 14882:2003 5.3.5 [expr.delete]/2.