正如标题所说,这两种抛出异常的方式之间有什么区别?
void method1() {
//...
throw new MyException();
}
void method2() {
//...
throw "my exception";
}
我害怕内存泄漏。
在method1中谁必须释放由new分配的内存?
在method2中,是在堆上分配的字符串(又是谁释放它?)?或者它是否像堆栈中的返回值一样传递?
答案 0 :(得分:3)
按值抛出并按引用捕获
的原因有很多如果您指向动态内存,则必须在catch网站上手动处理内存管理。
正如c++ coding standards中提出的那样:
如果你觉得你真的必须扔指针,可以考虑抛出一个类似值的智能指针,例如
shared_ptr<T>
而不是普通的T*
。