86
  1. auto_ptr 会在传入的 C++ 标准中被弃用吗?
  2. 是否应该使用 unique_ptr 而不是 shared_ptr 进行所有权转移?
  3. 如果 unique_ptr 不在标准中,那么我需要改用 shared_ptr 吗?
4

4 回答 4

86

更新:这个答案写于 2010 年,正如预期的那样std::auto_ptr已被弃用。该建议是完全有效的。

在 C++0xstd::auto_ptr中将被弃用,取而代之的是std::unique_ptr. 智能指针的选择将取决于您的用例和您的要求,具有std::unique_ptr可在容器内使用的单一所有权的移动语义(使用移动语义)以及std::shared_ptr何时共享所有权。

您应该尝试使用最适合这种情况的智能指针,选择正确的指针类型可以让其他程序员深入了解您的设计。

于 2010-03-08T19:37:30.210 回答
23

是的,从今天起auto_ptr将在 C++0x 中弃用,您应该unique_ptr改用它。来自最新的标准草案 (n3035),第 D.9 节

类模板auto_ptr已弃用。[注意:类模板unique_ptr(20.9.10)提供了更好的解决方案。——尾注]

在标准被批准之前,委员会总是有可能修改这个决定,尽管我觉得这个决定不太可能。

于 2010-03-08T19:41:50.863 回答
19

不仅在 C++11 (D.10, page 1228) 中auto_ptr被弃用,而且在 C++的未来版本中也将被删除

采用 N4190,实际上从 C++ 标准库中删除(不仅仅是弃用)一些过时的东西,包括auto_ptr, bind1st/ bind2nd, ptr_fun/ mem_fun/ mem_fun_ref,random_shuffle等等。这些现在都已从 C++17 标准库草案中删除,并且不会成为未来可移植 C++ 的一部分。

关于它的另一个文档:Programming Language C++,Library Evolution Working Group - Document N4190,如果您想了解更多信息。

auto_ptr您可以使用自动转换任何代码,unique_ptr而是使用:

任何代码 usingauto_ptr都可以机械地转换为 using unique_ptr,并在“复制”move()时插入。auto_ptr

于 2014-11-24T20:30:13.340 回答
2

不,它没有被弃用。可能是,如果 C++0x 曾经被接受。它实际上总是会得到支持。我不相信任何已弃用的功能已从现实世界的 C++ 实现中删除。

于 2010-03-08T19:48:01.950 回答