3

std::auto_ptr 缺少 const 复制构造函数,因此我不能直接在集合中使用它。有没有办法在不使用提升指针集合模板的情况下获得例如 std::auto_ptr 的向量?

4

3 回答 3

3

如果你有一个 C++0x 编译器,你可以使用shared_ptrunique_ptr酌情使用。

@James McNellis 提供了一个很好的正确unique_ptr用法示例。在这里查看演练,由@D.Shawley 提供。[我敢肯定,在这些线程上仍然会受到支持。]shared_ptr

vectorofauto_ptr总是无效的,尽管 Visual C++ v6 不同意。

于 2010-10-19T19:13:45.873 回答
2

不,你不能有 的向量std::auto_ptr,尽管有很多猜测你可以。但是,如果您的编译器支持 C++0x,您可以使用std::unique_ptr,这是已弃用的自动指针的新替代方案,引用新标准,它提供了更好的替代方案。另请参阅此线程

于 2010-10-19T19:14:15.860 回答
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的评论澄清)

于 2010-10-19T19:17:16.163 回答