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代码中仍然有一个有用的有用位置,还是刚刚过时?
正如James在他的回答中提到的那样,Boost.Pointer容器提供了一个更直观的界面,与通过粘贴unique_ptr到标准库容器中所获得的相比.
除此之外,boost::ptr_vector<T>(和朋友)将指向的类型存储为void *底层,因此您不会为每个类型获取完整的类模板实例T.事实并非如此vector<unique_ptr<T>>.