可以在std容器中使用boost :: smart_ptr,例如scoped_ptr和shared_ptr,例如std :: map?
class SomeClass
{
std::map<int,boost::scoped_ptr<SomeOtherClass> > a_map;
};
作为boost::smart_ptr can be used for polymorphism,在这种情况下也是如此吗?是否会破坏容器,触发子类的正确销毁?
答案 0 :(得分:20)
scoped_ptr
不能在标准容器中使用,因为它无法复制(容器的接口需要)。但是,可以使用shared_ptr
。
如果您不能使用C ++ 11并且您已经使用了boost,请考虑pointer containers,它的性能会比共享指针容器好一些。
如果你正在使用C ++ 11,请考虑一个unique_ptr
的容器,它应该与boost的指针容器类似地执行。