std::auto_ptr
不允许存储在STL容器中,例如std::vector
。然而,有时候我需要返回一组多态对象,因此我不能返回对象的向量(由于切片问题)。我可以使用std::tr1::shared_ptr
并将其放入vector
中,但是这样我就必须付出维护单独引用计数的高昂代价,而拥有实际内存的对象(容器)不再逻辑上“拥有”这些对象,因为它们可以被复制出来而不考虑所有权。
C++0x以std::vector<std::unique_ptr<t>>
的形式提供了完美的解决方案,但我无法访问C++0x。
其他注意事项:
- 我无法访问C++0x,但我可以使用TR1。
- 我想避免使用Boost(尽管如果没有其他选择则可用)
- 我知道
boost::ptr_container
容器(即boost::ptr_vector
),但我想避免使用它,因为它会破坏调试器(内部存储在void *
中,这意味着很难在调试器中查看实际存储在容器中的对象)
boost::ptr_vector
,或者在仅在内部使用集合时使用我提到的内容(尽管带有私有成员)。 - Alexandre C.