发布于 2010-03-09 03:37:30
更新:此答案是在2010年编写的,正如预期的那样,std::auto_ptr
已被弃用。这个建议是完全有效的。
在C++0x中,为了支持std::unique_ptr
,std::auto_ptr
将被弃用。智能指针的选择将取决于您的用例和需求,具有移动语义的std::unique_ptr
可以在容器内使用(使用移动语义),当所有权共享时使用std::shared_ptr
。
您应该尝试使用最适合这种情况的智能指针,选择正确的指针类型可以让其他程序员深入了解您的设计。
发布于 2010-03-09 03:41:51
是的,从今天起,C++0x中将不再推荐使用auto_ptr
,您应该使用unique_ptr
。来自最新的标准草案(n3035),D.9节
类模板
auto_ptr
已弃用。注意:类模板unique_ptr
(20.9.10)提供了更好的解决方案。-end笔记
在标准被批准之前,委员会总是有可能修改这个决定,尽管我觉得这对这个决定来说是不太可能的。
发布于 2014-11-25 04:30:13
不仅auto_ptr
将被弃用in C++11 (D.10, page 1228),它还将被删除in a future version of C++
采用了N4190,并且实际上从C++标准库中删除了几个过时的东西,包括
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()
。
https://stackoverflow.com/questions/2404115
复制相似问题