带有new操作符的异常和不带有new操作符的异常

Exceptions with new and exceptions without new operator

本文关键字:操作符 异常 new 带有      更新时间:2023-10-16

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

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

我害怕内存泄漏。

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

在method2中,是否在堆上分配字符串(再次释放它?)?还是像在堆栈上传递返回值一样传递?

按值抛出,按引用捕获

如果抛出指向动态内存的指针,则必须在catch站点手动处理内存管理

按照c++编码标准的建议:

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