将boost::scoped_ptr更改为std::unique_ptr

7
我在代码中使用了boost::scoped_ptr,现在想用std::unique_ptr来替换它。我想知道转换到std::unique_ptr是否有任何缺点。Boost可以跨平台和编译器使用。但我不确定所有编译器是否都支持C++11,例如MSVC。我知道GCC和Clang对C++11的支持非常好。
我已经阅读了“intrusive_ptr in C++11”这个SO问题,其简短的答案是“否”。如果有人使用过两者,请分享您的评论和想法。

std::unique_ptr是由标准规定的,因此任何符合规范的实现都应该支持它。但我不确定你具体在问什么。你所链接的问题特别想要Boost的语义。你的问题似乎有些不同,但我不确定它是什么。 - 5gon12eder
VS2010及其以后版本都实现了std::unique_ptr - Mgetz
1个回答

11

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

我建议您将boost::scoped_ptr<T>替换为const std::unique_ptr<T>。原因是这个最接近于boost::scoped_ptr<T>,它不可“移动”。然而,我相信boost::scoped_ptr<T>支持交换。因此,如果您正在使用它,编译器将在每次尝试交换const std::unique_ptr<T>时发出警告,然后您可以将这些实例标记为非const


谢谢 Howard。这个答案很有帮助。 - rkm
1
使用std::unique_ptr时是否存在性能问题或更好的性能? - rkm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接