带有new操作符的异常和不带有new操作符的异常
Exceptions with new and exceptions without new operator
正如标题所说,这两种抛出异常的方式有什么区别?
void method1() {
//...
throw new MyException();
}
void method2() {
//...
throw "my exception";
}
我害怕内存泄漏。
在method1中谁必须释放由new分配的内存?
在method2中,是否在堆上分配字符串(再次释放它?)?还是像在堆栈上传递返回值一样传递?
按值抛出,按引用捕获
如果抛出指向动态内存的指针,则必须在catch站点手动处理内存管理。
按照c++编码标准的建议:
如果你觉得你真的必须抛出一个指针,考虑抛出一个类似于值的智能指针,比如
shared_ptr<T>
,而不是普通的T*
。
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 类、异常和操作符
- 无异常的c++操作符重载错误检查
- 三元操作符:抛出异常和嵌套
- 操作符new在异常后销毁初始化的对象
- 操作符删除签名异常行为
- 带有new操作符的异常和不带有new操作符的异常
- 重载& lt; & lt;用于打印自定义异常的操作符
- 重载2D数组操作符并抛出异常
- 为什么重载操作符=使异常安全
- c++赋值操作符异常安全
- 如何查明函数模板中的赋值操作符T是否抛出异常
- 未处理的异常操作符重载