Std::unique_ptr::reset和构造函数异常
std::unique_ptr::reset and constructor exceptions
如果初始化unique_ptr
:
std::unique_ptr<Foo> i;
i.reset( new Foo() );
但是从Foo::Foo()
抛出异常,问题是:分配的内存发生了什么?unique_ptr如何避免它被泄露?这是new
操作内部处理的东西吗?
析构函数肯定会在作用域退出时被调用。由于reset
调用直到new Foo()
返回才被调用,因此似乎必须由new
处理,通过在异常离开构造函数时释放分配的内存。
是这样吗?
如果在Foo
的构造函数中抛出异常,那么唯一指针的reset
函数从一开始就不会被执行。因此,唯一指针保留其原始值。
如果对象构造抛出异常,new
表达式不会泄漏内存
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- 如何编写带有异常的构造函数
- 从 C++ 中异常的构造函数引发异常
- 我正在尝试创建一个使用 c++ 中的参数包构造函数的异常类
- 稍后在构造函数中重新启动异常指令删除此指令
- 自定义异常中的用户定义的空构造函数,具有多个继承和抽象基类
- 构造函数中引发的异常
- 如何捕获源自静态分配对象的构造函数的异常?
- 从构造函数内存泄漏引发异常
- 智能指针和构造函数异常
- 构造函数C++异常说明符
- boost::archive::text_iarchive构造函数异常
- C++堆栈对象的构造函数异常处理
- 默认构造函数C++异常不会引发吗?
- 当函数中静态变量的构造函数异常终止时会发生什么
- 在c++中,如果基类构造函数异常,则构造函数和析构函数的顺序可以是这样
- 如何捕获构造函数异常
- C++构造函数异常处理
- 捕获构造函数异常的RAII方法
- Std::unique_ptr::reset和构造函数异常