Try-Catch和Delete []问题

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工作得很好.但是,当我现在尝试它时,我得到一个可怕的错误.

有任何想法吗?

Ker*_* SB 8

你试图做的不是合法的C++,也没有意义.

分配new必须后跟删除delete,并用new[]by 分配delete[]; 这必须恰好就是这样,其他一切都是未定义的行为.

你不能"试着看看你是否编写了正确的代码".异常表示异常运行时行为,但您的错误是一个无法处理的静态编译时错误,但必须修复.

但是,在代码中永远不应该有一个点,你不知道给定的指针意味着什么!由于语言是静态类型,因此您原则上应始终了解所涉及的类型.如果你想传递对象(可能是多态的),那么任何需要动态分配的东西都应该包装在它自己的管理器类中(比如shared_ptrunique_ptr).