C++ std::auto_ptr复制构造函数

3

std::auto_ptr缺少const复制构造函数,因此我不能直接在集合中使用它。是否有一些方法可以使用std :: auto_ptr的vector,而不使用boost指针集合模板?

3个回答

3
如果您有一个C++0x编译器,可以根据需要使用shared_ptrunique_ptr。这里有一个关于正确使用unique_ptr的很好的示例here,由@James McNellis提供。对于shared_ptr的演练,请看这里here,由@D.Shawley提供。(在这些帖子上点赞仍将不胜感激。)auto_ptr的向量始终无效,尽管Visual C++ v6持不同意见。

1
shared_ptr 不需要 C++0x,它在 TR1 中。 - Potatoswatter
@Potatoswatter - 感谢您的澄清说明 - 如果 OP 可以访问,那么 unique_ptr 更适合纠正有缺陷的 auto_ptr 语义。 - Steve Townsend

2

不,你不能拥有一个 std::auto_ptr 的向量,尽管存在许多可以这样做的猜测。但是如果你的编译器支持 C++0x,你可以使用 std::unique_ptr,它是被弃用的自动指针的新替代品,引用新标准中的话说,提供了更好的替代方案。另请参见此线程


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的评论进行澄清)


2
我想反驳你的说法:“任何超出这种用途可能是危险和/或破损的”… - Armen Tsirunyan
说得好,还有其他有效的用途。虽然auto_ptr的用途相对有限,如果你在受限范围之外使用它,比如作为函数中的局部变量,那么它可能会非常危险。 - kkress

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接