Boost.Pointer容器在C++ 11/14中被std :: unique_ptr淘汰了?

Mr.*_*C64 9 c++ boost stl smart-pointers c++11

是否std::unique_ptr使C++ 11/14中的Boost.Pointer容器库过时了?

在C++ 98/03中,没有移动语义,并且如果与原始指针相比,智能指针shared_ptr具有与引用计数相关的开销(对于ref计数块和互锁的递增/递减).因此,std::vector<shared_ptr<T>>如果与之相比,就会产生开销std::vector<T*>.

std::vector<std::unqiue_ptr<T>>正如高效std::vector<T*>(没有引用计数的开销),并且除了安全关于异常和自动破坏(即vector<unique_ptr<T>>析构函数会自动调用析构函数对于T其指针存储中的项目vector)?

如果是这样,Boost.Pointer容器在C++ 11/14代码中仍然有一个有用的有用位置,还是刚刚过时?

Jam*_*nze 10

它不是遮挡; 它有一个完全不同的,更直观的界面std::vector<std::unique_ptr<T>>.


Pra*_*ian 6

正如James在他的回答中提到的那样,Boost.Pointer容器提供了一个更直观的界面,与通过粘贴unique_ptr到标准库容器中所获得的相比.

除此之外,boost::ptr_vector<T>(和朋友)将指向的类型存储为void *底层,因此您不会为每个类型获取完整的类模板实例T.事实并非如此vector<unique_ptr<T>>.

  • 在`无效*`吊装还一个"已知的优化",以减少模板实例为`的std ::矢量<T*>`,但无论是当前的libc ++也不当前的libstdc ++使用优化了.请参阅@JonathanWakely的[此答案](http://stackoverflow.com/a/13914629/819272). (3认同)