c++ - 为什么 boost 没有 make_scoped()?

标签 c++ boost make-shared scoped-ptr

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/

相关文章:

C++程序返回int类型,为什么return -1返回255呢?

c++ - 将 std::map 复制/插入到 boost::bimap

c++ - 在我的测试中,make_shared(boost 或 STL)似乎比 shared_ptr+new 稍慢

C++11 传递 'this' 作为 std::make_shared 的参数

c++ - 通过 protected 构造函数和静态成员函数强制使用 std::shared_ptr 以创建实例和 std::make_shared

c++ - 如何检查正则表达式是否陷入无限循环?

C++:CRTP:如何知道所有对象都计数?

c++ - 无法构建 Boost Spirit 示例 conjure2

C++ boost::qi 将空格和换行符分隔的数字解析为二维 vector

C++,()运算符重载,它的工作是什么