- auto_ptr 会在传入的 C++ 标准中被弃用吗?
- 是否应该使用 unique_ptr 而不是 shared_ptr 进行所有权转移?
- 如果 unique_ptr 不在标准中,那么我需要改用 shared_ptr 吗?
4 回答
更新:这个答案写于 2010 年,正如预期的那样std::auto_ptr
已被弃用。该建议是完全有效的。
在 C++0xstd::auto_ptr
中将被弃用,取而代之的是std::unique_ptr
. 智能指针的选择将取决于您的用例和您的要求,具有std::unique_ptr
可在容器内使用的单一所有权的移动语义(使用移动语义)以及std::shared_ptr
何时共享所有权。
您应该尝试使用最适合这种情况的智能指针,选择正确的指针类型可以让其他程序员深入了解您的设计。
是的,从今天起auto_ptr
将在 C++0x 中弃用,您应该unique_ptr
改用它。来自最新的标准草案 (n3035),第 D.9 节
类模板
auto_ptr
已弃用。[注意:类模板unique_ptr
(20.9.10)提供了更好的解决方案。——尾注]
在标准被批准之前,委员会总是有可能修改这个决定,尽管我觉得这个决定不太可能。
不仅在 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
而是使用:
任何代码 using
auto_ptr
都可以机械地转换为 usingunique_ptr
,并在“复制”move()
时插入。auto_ptr
不,它没有被弃用。可能是,如果 C++0x 曾经被接受。它实际上总是会得到支持。我不相信任何已弃用的功能已从现实世界的 C++ 实现中删除。