答案 0 :(得分:72)
更新:此答案是在2010年编写的,正如预期的那样std::auto_ptr
已被弃用。建议完全有效。
在C ++ 0x std::auto_ptr
中将弃用std::unique_ptr
。智能指针的选择将取决于您的用例和您的要求,std::unique_ptr
具有单个所有权的移动语义,可以在容器内使用(使用移动语义),并在共享所有权时使用std::shared_ptr
。 / p>
您应该尝试使用最适合这种情况的智能指针,选择正确的指针类型可以让其他程序员深入了解您的设计。
答案 1 :(得分:20)
是的,截至今天{C} 0x将弃用auto_ptr
,您应该使用unique_ptr
。根据最新的标准草案(n3035),第D.9节
不推荐使用类模板
auto_ptr
。 [注意:类模板unique_ptr
(20.9.10)提供了更好的解决方案。 - 后注]
在批准标准之前,委员会总是有可能修改这一决定,尽管我觉得这个决定不太可能。
答案 2 :(得分:14)
不仅auto_ptr
已被弃用in C++11 (D.10, page 1228),它也将被删除 in a future version of C++:
采用N4190,实际上从C ++标准库中移除(不仅仅是弃用)了几个古老的东西,包括
auto_ptr
,bind1st
/bind2nd
,{ {1}} /ptr_fun
/mem_fun
,mem_fun_ref
以及其他一些内容。现在,这些都已从C ++ 17标准库草案中删除,并且不会成为未来可移植C ++的一部分。
关于它的另一个文档:Programming Language C++, Library Evolution Working Group - Document N4190,如果您想了解更多信息。
您可以使用random_shuffle
自动转换任何代码,而不是使用auto_ptr
:
使用
unique_ptr
的任何代码都可以使用auto_ptr
进行机械转换,只要unique_ptr
被“复制”,就会插入move()
。
答案 3 :(得分:4)
不,它没有被弃用。它可能是,如果C ++ 0x被接受。它实际上总是得到支持。我不相信任何已弃用的功能都已从实际的C ++实现中删除。