更新:这个答案写于 2010 年,正如预期的那样,
std::auto_ptr
已在 C++11 中弃用并在 C++17 中删除。这个建议完全有效。
在 C++0x 中,
std::auto_ptr
将被弃用,取而代之的是 std::unique_ptr
。智能指针的选择将取决于您的用例和要求,std::unique_ptr
具有单一所有权的移动语义,可在容器内使用(使用移动语义),而std::shared_ptr
则可在共享所有权时使用。
您应该尝试使用最适合情况的智能指针,选择正确的指针类型可以让其他程序员深入了解您的设计。
是的,从今天起,C++0x 中将弃用
auto_ptr
,您应该使用 unique_ptr
来代替。 摘自最新标准草案 (n3035),D.9 节
类模板
已弃用。 [注意:类模板auto_ptr
(20.9.10)提供了更好的解决方案。 ——尾注]unique_ptr
在标准获得批准之前,委员会总是有可能修改此决定,尽管我认为此决定不太可能。
不仅
auto_ptr
在 C++11 中被弃用(D.10,第 1228 页),它还将被 删除 在 C++ 的未来版本中:
采用了 N4190,并且实际上从 C++ 标准库中删除了(不仅仅是弃用)一些过时的东西,包括有关它的另一个文档:、
auto_ptr
bind1st
/bind2nd
、ptr_fun
/mem_fun
/mem_fun_ref
、random_shuffle
,还有一些。这些现已全部从 C++17 标准库草案中删除,并且不会成为未来可移植 C++ 的一部分。
编程语言 C++,库演进工作组 - 文档 N4190,如果您想了解更多信息。
您可以使用auto_ptr
自动转换任何代码,使用
unique_ptr
代替:
任何使用
auto_ptr
的代码都可以机械地转换为使用unique_ptr
,只要“复制”move()
就插入auto_ptr
。