Boost 的make_shared()
函数在尝试创建shared_ptr
.
为什么没有make_scoped()
等价物?有共同的最佳实践吗?
boost::scoped_ptr
这是文档中对我来说似乎不安全的代码示例:
boost::scoped_ptr<Shoe> x(new Shoe);
这行代码将按顺序完成这三件事:
- 分配堆内存为
Shoe
- 调用构造函数
Shoe
- 调用构造函数
boost::scoped_ptr<Shoe>
如果 for 的构造函数Shoe
抛出异常, 就会导致内存泄漏。 (请参阅 R. Martinho Fernandes 的回答)scoped_ptr
不会处理释放,因为它尚未构建。
这是疏忽吗?或者有没有我没有注意到的解决方案?