繁体   English   中英

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表达式不会泄漏内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM