【问题标题】:Changing boost::scoped_ptr to std::unique_ptr将 boost::scoped_ptr 更改为 std::unique_ptr
【发布时间】:2015-05-09 18:11:47
【问题描述】:

我在我想用std::unique_ptr 替换的代码中使用boost::scoped_ptr。我想知道搬到std::unique_ptr 是否有任何缺点。 Boost 可以跨平台和编译器移植。但我不确定是否所有编译器(如 MSVC)都支持 C++11。我知道 GCC 和 Clang 很好地支持 C++11。

我已经阅读了 SO 问题“intrusive_ptr in C++11”,其简短回答为“否”。所以如果有人有使用这两种方法的经验,请分享你的 cmet 和想法

【问题讨论】:

  • std::unique_ptr 由标准指定,因此任何兼容的实现都最好支持它。但我不确定你到底在问什么。您链接到的问题特别需要 Boost 的语义。您的问题似乎有所不同,但我不确定它是什么。
  • vs2010 及更高版本的实现为 std::unique_ptr

标签: c++ c++11 boost smart-pointers unique-ptr


【解决方案1】:

Mgetz 慷慨地提供了所有最近的 VS 实现提供的信息unique_ptr

我建议您将boost::scoped_ptr<T> 替换为const std::unique_ptr<T>const 的原因是它与boost::scoped_ptr<T> 的模型最接近,它不是“可移动的”。但是我相信boost::scoped_ptr<T> 确实支持交换。因此,如果您使用它,编译器会在您尝试交换const std::unique_ptr<T> 的任何地方报错,然后您可以将这些实例标记为非const

【讨论】:

  • 谢谢霍华德。这个答案很有帮助
  • 使用 std::unique_ptr 时是否有任何性能问题或更好的性能
猜你喜欢
  • 2016-05-10
  • 1970-01-01
  • 2014-03-27
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
相关资源
最近更新 更多