【发布时间】:2013-04-26 09:36:26
【问题描述】:
最好从代码开始理解这一点
#include "Hello1.h"
#include "Hello2.h"
int main(int argc, char ** argv)
{
// Hello1 and Hello2 are derevied classes of Hello
// And there constructor throws an exception
Hello * h;
try
{
if (argv[1][0]=='1')
h = new Hello1;
else
h = new Hello2;
}
catch (std::exception ex) { /*print error*/ }
delete h;
}
如果Hello1 和Hello2 抛出异常,它segfault。但是,如果我添加
Hello h = NULL;
有效!!!
Hello 是一个带有抛出异常的构造函数的类
我能想到的就是构造函数中的异常从内存中删除对象!为什么在哪里谁...解释!请。
【问题讨论】:
-
什么是
Hello?typedef是指针类型还是可以从自己的指针构造的类型? -
如果
h不是指针,h = new Hello1;如何编译?或者你的意思是Hello* h? -
@Andy Prowl 你是对的,对不起,我是凭记忆写的。
-
什么是
Exception?所以你的意思是std::exception? -
@Angel.King.47:请不要“凭记忆写”,请确保您实际发布的代码编译并生成您发布的实际错误。这样可以避免每个人都追随红鲱鱼。
标签: c++ class exception delete-operator