auto_ptr是否已被弃用?

时间:2010-03-08 19:32:41

标签: c++ standards smart-pointers auto-ptr unique-ptr

  1. 在传入的C ++标准中是否会弃用auto_ptr?
  2. unique_ptr应该用于所有权转移而不是shared_ptr吗?
  3. 如果unique_ptr不在标准中,那么我是否需要使用shared_ptr?

4 个答案:

答案 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_funmem_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 ++实现中删除。