2010-10-19 199 views
2

std :: auto_ptr缺少const拷贝构造函数,因此我不能直接在集合中使用它。有没有一些方法,例如向量的std :: auto_ptr,而不使用boost指针集合模板?C++ std :: auto_ptr拷贝构造函数

回答

3

如果你有一个C++ 0x编译器,你可以根据需要使用shared_ptrunique_ptr

有一个正确的unique_ptr使用here礼貌@James McNellis。对于shared_ptr漫游外观here,由@ D.Shawley提供。 [Upvotes仍然会在这些线程上赞赏,我相信。]

vectorauto_ptr始终无效,虽然Visual C++ v6不同意。

+1

'shared_ptr'不需要C++ 0x;它在TR1中。 – Potatoswatter 2010-10-19 19:19:48

+0

@Potatoswatter - 感谢您的澄清笔记 - 如果OP有权访问它,'unique_ptr'更适合纠正有缺陷的'auto_ptr'语义。 – 2010-10-19 19:22:06

2

不,你不能有一个向量std::auto_ptr,虽然有很多猜测,你可以。但是如果你的编译器支持C++ 0x,那么你可以使用std::unique_ptr,这是不推荐使用的自动指针的新选择,它引用了新标准,它提供了一个优越的选择。另请参阅this thread

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

我会与你的陈述争辩“除此之外的任何用途可能是危险的和/或破碎的......” – 2010-10-19 19:19:58

+0

够公平的,还有其他有效的用途。虽然auto_ptr的使用相对有限,但如果您在约束范围外使用它,可能会非常危险,例如在函数中作为局部变量。 – kkress 2010-10-19 19:25:31