【发布时间】:2013-11-18 17:04:33
【问题描述】:
我刚刚读到this page 意识到std::shared_ptr 的构造函数只有一个指针参数不是noexcept。
因此以下代码包含可能的内存泄漏:
std::shared_ptr<int> p3 (new int);
原因是可能发生两次分配:
- 调用构造函数之前的第一个
- shared_ptr 构造函数中的第二个(这就是在 VS 2012 中发生的情况)
这里有两个问题:
如果第二次分配抛出异常,是不是第一次的内存泄漏?
如果答案是肯定的:
使用 std::shared_ptr 的正确习惯用法是什么?
- 使用 make_shared
- 将第一个分配的所有权授予 std::unique_ptr 然后转移所有权
- 其他想法?
【问题讨论】:
-
哦,天哪,一个关于智能指针的有趣问题。我认为这已经不可能了。 +1
-
The other reference 已经有了这个问题的答案...
标签: c++ c++11 memory-leaks shared-ptr