std :: auto_ptr缺少const拷贝构造函数,因此我不能直接在集合中使用它。有没有办法在不使用boost指针集合模板的情况下拥有std :: auto_ptr的矢量?
答案 0 :(得分:3)
如果您有C ++ 0x编译器,则可以根据需要使用shared_ptr
或unique_ptr
。
@James McNellis提供了一个正确的unique_ptr
使用here礼貌的好例子。对于shared_ptr
演练here,由@ D.Shawley提供。 [我确信,在这些主题上仍然会赞赏Upvotes。]
vector
的{{1}}始终无效。
答案 1 :(得分:2)
不,你不能拥有std::auto_ptr
的向量,尽管你可以做很多猜测。但是如果你的编译器支持C ++ 0x,你可以使用std::unique_ptr
,它是不推荐使用的自动指针的新选择,引用新标准提供了一个更好的选择。另请参阅this thread
答案 2 :(得分:1)
auto_ptr设计用于在变量离开作用域时自动删除。你不想在集合中使用它,而是如上所述你想使用像shared_ptr这样的东西。
auto_ptr的典型用法示例:
void foo()
{
auto_ptr<int> bar = auto_ptr<int>(new int);
...
return; //memory held by auto_ptr is automatically deleted
}
如果您不确定auto_ptr的特殊语义,那么超出此用途的任何内容都可能存在危险和/或损坏。 (编辑:根据Armen的评论澄清)