auto_ptr 是否已弃用?

问题描述 投票:0回答:4
  1. auto_ptr 在传入的 C++ 标准中会被弃用吗?
  2. 是否应该使用 unique_ptr 而不是 share_ptr 来进行所有权转移?
  3. 如果unique_ptr不在标准中,那么我需要使用shared_ptr吗?
c++ standards smart-pointers auto-ptr unique-ptr
4个回答
89
投票

更新:这个答案写于 2010 年,正如预期的那样,

std::auto_ptr
已在 C++11 中弃用并在 C++17 中删除。这个建议完全有效。

在 C++0x 中,

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

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


23
投票

是的,从今天起,C++0x 中将弃用

auto_ptr
,您应该使用
unique_ptr
来代替。 摘自最新标准草案 (n3035),D.9 节

类模板

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

在标准获得批准之前,委员会总是有可能修改此决定,尽管我认为此决定不太可能。


21
投票

不仅

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


1
投票
不,它并未被弃用。如果 C++0x 被接受的话,也许是这样。实际上它将永远受到支持。我不相信现实世界的 C++ 实现中曾删除过任何已弃用的功能。

© www.soinside.com 2019 - 2024. All rights reserved.