【发布时间】:2014-05-24 11:27:11
【问题描述】:
boost 文档页面reads
scoped_ptr不能在 C++ 标准库容器中使用。如果您需要一个智能指针,请使用shared_ptr。
我认为 不可复制 将成为scoped_ptr 的障碍,但由于 c++11,就某些容器而言,我们可以:
- 使用
emplace_back等就地构建 - 移动资源而不复制
那么 scoped_ptr 不能用于 STL 容器的原因是什么?
【问题讨论】:
-
为什么不改用
std::unique_ptr? -
如果 C++11 是一个选项,请使用
std::unique_ptr,它在各方面都优于scoped_ptr。后者只是作为一种廉价、可行的中途措施而存在,它在没有移动语义的情况下尽其所能(与破碎的std::auto_ptr形成对比)。 -
@Jarod42 我想知道是否禁止使用(那是什么原因?)还是只是文档过期的情况。
-
@NikosAthanasiou:任何你有一个本地范围的
scoped_ptr<T>,你都可以用unique_ptr<T> const替换它。任何你在标准容器中有scoped_ptr<T>的地方,你都可以用unique_ptr<T>替换它,你的生活会更快乐,整体上得到改善。 -
@Mankarse:至少你可以说如果你用
std::unique_ptr替换boost::scoped_ptr会中断的代码是病态的。您可以根据移动性和切换代码路径做一些 SFINAE 条件,但是......为什么? :-)
标签: c++ c++11 boost stl containers