jul*_*ria 0 c++ exception-handling try-catch delete-operator
我遇到了一个try-catch情况的问题,这里是代码(这很简单):
struct Something
{
int A, B, C;
Something()
{
A = B = C = 0;
}
~Something()
{
cout << "Destructor " << endl;
}
};
int main()
{
Something * s = new Something;
//Something * s = new Something[5];
try
{
delete[] s;
}
catch(exception& e)
{
delete s;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我打算做的是首先尝试将指针删除为数组,如果失败,则进行简单删除.
所以,当我第一次尝试使用'Something'(如在注释行中)的数组时,itr工作得很好.但是,当我现在尝试它时,我得到一个可怕的错误.
有任何想法吗?
你试图做的不是合法的C++,也没有意义.
分配new必须后跟删除delete,并用new[]by 分配delete[]; 这必须恰好就是这样,其他一切都是未定义的行为.
你不能"试着看看你是否编写了正确的代码".异常表示异常运行时行为,但您的错误是一个无法处理的静态编译时错误,但必须修复.
但是,在代码中永远不应该有一个点,你不知道给定的指针意味着什么!由于语言是静态类型,因此您原则上应始终了解所涉及的类型.如果你想传递对象(可能是多态的),那么任何需要动态分配的东西都应该包装在它自己的管理器类中(比如shared_ptr或unique_ptr).