【发布时间】:2010-08-10 14:42:23
【问题描述】:
我最近开始欣赏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吗?还是应该避免?
【问题讨论】:
-
无论你在做什么项目,我都会坚持使用
auto_ptr,并在你开始新事物时切换,这样你就不会因为将它们混合在一起而造成复杂性。 (我假设您使用的编译器支持unique_ptr。) -
std::auto_ptr被弃用不是因为它没有用,而是因为std::unique_ptr做了它已经做的一切,只是更好。所以无论你是否切换到std::unique_ptr,都没有理由停止使用std::auto_ptr。 -
Eric Lippert 很久以前就写过这篇文章。读起来很有趣:blogs.msdn.com/b/ericlippert/archive/2003/09/16/53016.aspx
-
@Mike:我真的不明白它是如何应用的。所以 COM refcounting 是一团糟,他写了一些非法代码,当他还涉及(写得不好)智能指针时,这些代码碰巧爆炸了。几乎没有告诉我们太多关于在健全的 C++ 代码中使用的 sane 智能指针类。
-
@jalf 嘿,我不知道。我只是添加一些信息。
标签: c++