Boost 的 make_shared()
函数 promise 在尝试创建 shared_ptr
时是异常安全的.
为什么没有make_scoped()
相等的?是否有通用的最佳做法?
这是来自 boost::scoped_ptr
documentation 的代码示例这对我来说似乎不安全:
boost::scoped_ptr<Shoe> x(new Shoe);
这行代码会依次完成这三件事:
- 为
Shoe
分配堆内存 - 调用
Shoe
的构造函数 - 调用
boost::scoped_ptr<Shoe>
的构造函数
如果 Shoe
的构造函数抛出异常,内存将被泄露。 (参见 R. Martinho Fernandes 的回答) scoped_ptr
不会处理释放,因为它还没有被构造。
这是疏忽吗?或者有没有我没注意到的解决方案?
最佳答案
scoped_ptr
早于移动语义并且在设计上是不可复制的。因此,make_scoped
将无法实现,因为为了从函数返回对象,其类型必须是可移动的或可复制的。
关于c++ - 为什么 boost 没有 make_scoped()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11337292/