[英]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
表达式不会泄漏内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.