没有new运算符的新例外情况和例外情况

时间:2014-06-26 06:51:42

标签: c++ exception memory-leaks exception-handling null

正如标题所说,这两种抛出异常的方式之间有什么区别?

void method1() {
  //...
  throw new MyException();
}

void method2() {
  //...
  throw "my exception";
}

我害怕内存泄漏。

在method1中谁必须释放由new分配的内存?

在method2中,是在堆上分配的字符串(又是谁释放它?)?或者它是否像堆栈中的返回值一样传递?

1 个答案:

答案 0 :(得分:3)

按值抛出并按引用捕获

的原因有很多

如果您指向动态内存,则必须在catch网站上手动处理内存管理

正如c++ coding standards中提出的那样:

  

如果你觉得你真的必须扔指针,可以考虑抛出一个类似值的智能指针,例如shared_ptr<T>而不是普通的T*