- auto_ptr 在即将到来的 C++ 标准中是否会被弃用?
- 在所有权转移方面,是应该使用 unique_ptr 而非 shared_ptr 吗?
- 如果 unique_ptr 不在标准中,那么我需要使用 shared_ptr 吗?
是的,截至今天,在C++0x中auto_ptr
已被弃用,应该使用unique_ptr
代替。根据最新的草案标准(n3035),第D.9节
类模板
auto_ptr
已被弃用。[注意:类模板unique_ptr
(20.9.10)提供了更好的解决方案。--注]
在标准得到批准之前,委员会可能会修改这个决定,尽管我认为这种情况不太可能发生。
auto_ptr
在C++11 (D.10, page 1228)中已被弃用,它将在未来版本的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, 如果你需要更多信息。
您可以通过使用unique_ptr
来代替auto_ptr
将任何代码自动转换:
可以机械地将使用
auto_ptr
的任何代码转换为使用unique_ptr
,并在每次“复制”auto_ptr
时插入move()
。
不,它并没有被废弃。如果C++0x被接受,它可能会被废弃。但实际上,它将一直得到支持。我认为任何被废弃的功能都从未在实际的C++实现中被删除。
<iostream.h>
而不是auto_ptr
,但例如微软VC++就不再提供这个库了。 - Jerry Coffin
auto_ptr
在 C++17 中已被移除。请参阅 ISO/IEC JTC1/SC22/WG21 N4190 和 Updates to my trip report : Standard C++。 - li ki