【发布时间】:2011-04-27 16:11:20
【问题描述】:
std::auto_ptr 缺少 const 复制构造函数,因此我不能直接在集合中使用它。有什么方法可以在不使用 boost 指针集合模板的情况下获得例如 std::auto_ptr 的向量?
【问题讨论】:
std::auto_ptr 缺少 const 复制构造函数,因此我不能直接在集合中使用它。有什么方法可以在不使用 boost 指针集合模板的情况下获得例如 std::auto_ptr 的向量?
【问题讨论】:
【讨论】:
shared_ptr 不需要 C++0x;它在 TR1 中。
unique_ptr,则更适合纠正有缺陷的 auto_ptr 语义。
不,你不能拥有std::auto_ptr 的向量,尽管有很多猜测你可以。但是,如果您的编译器支持 C++0x,您可以使用 std::unique_ptr,这是已弃用的自动指针的新替代方案,引用新标准,提供了更好的替代方案。另见this thread
【讨论】:
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 的评论进行澄清)
【讨论】: