我最近开始欣赏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
吗?还是要避免?
答案 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)
我建议你去使用提升智能指针。