我应该停止使用auto_ptr吗?

时间:2010-08-10 14:42:23

标签: c++

我最近开始欣赏std::auto_ptr,现在我读到它将是deprecated。我开始在两种情况下使用它:

  • 工厂的退货值
  • 传递所有权转移

示例:

// Exception safe and makes it clear that the caller has ownership.
std::auto_ptr<Component> ComponentFactory::Create() { ... }

// The receiving method/function takes ownership of the pointer. Zero ambiguity.
void setValue(std::auto_ptr<Value> inValue);

尽管存在有问题的复制语义,但我发现auto_ptr很有用。上面的例子似乎没有替代方案。

我应该继续使用它,然后切换到std::unique_ptr吗?还是要避免?

3 个答案:

答案 0 :(得分:5)

尽管存在缺陷,但它非常有用,我强烈建议您继续使用它并在可用时切换到unique_ptr

::std::unique_ptr需要一个支持rvalue引用的编译器,它是C ++ 0x草案标准的一部分,并且需要一段时间才能真正得到它的广泛支持。在rvalue引用可用之前,::std::auto_ptr是您可以做的最好的。

代码中同时包含::std::auto_ptr::std::unique_ptr可能会让某些人感到困惑。但是,当您决定更改::std::unique_ptr时,您应该能够搜索和替换{{1}}。如果这样做,您可能会遇到编译器错误,但它们应该很容易修复。对this question about replacing ::std::auto_ptr with ::std::unique_tr的评分最高的答案有更多详细信息。

答案 1 :(得分:1)

弃用并不意味着它会消失,只会有更好的选择。

我建议继续在当前代码上使用它,但在新代码上使用新的替代方案(新程序或模块,对当前代码的小改动)。一致性很重要

答案 2 :(得分:-1)

我建议你去使用提升智能指针。