【问题标题】:Exceptions with new and exceptions without new operator带有 new 的异常和没有 new 运算符的异常
【发布时间】:2014-08-16 22:19:12
【问题描述】:

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

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

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

我害怕内存泄漏。

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

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

【问题讨论】:

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


【解决方案1】:

按值抛出并按引用捕获

的原因有很多

如果你抛出一个指向动态内存的指针,你将不得不手动处理 catch 站点上的内存管理

正如c++ coding standards 中所提议的:

如果您觉得确实必须抛出一个指针,请考虑抛出一个类似值的智能指针,例如 shared_ptr<T>,而不是普通的 T*

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多