auto_ptr是否被弃用?

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

更新:这个答案写在2010年,并作为预期std::auto_ptr已被弃用。 build议完全有效。

在C ++中0x std::auto_ptr将被弃用,赞成std::unique_ptr 。 智能指针的select将取决于您的用例和您的要求, std::unique_ptr具有单一所有权的移动语义,可以在容器内使用(使用移动语义)和std::shared_ptr共享所有权。

您应该尝试使用最适合情况的智能指针,select正确的指针types为其他程序员提供对devise的深入了解。

是的,从今天起, auto_ptr将在C ++ 0x中被弃用,您应该使用unique_ptr代替。 从最新的标准草案(n3035),D.9节

类模板auto_ptr已弃用。 [注意:类模板unique_ptr (20.9.10)提供了一个更好的解决scheme。 – 注意]

在标准获得批准之前,委员会总是可以修改这个决定,尽pipe我觉得这个决定不太可能。

不仅在C ++ 11(D.10,1228页)中不推荐使用auto_ptr ,还将在未来版本的C ++中 删除它:

采用了N4190,实际上从C ++标准库中删除了一些陈旧的东西(不仅仅是废弃),包括auto_ptrbind1st / bind2ndptr_fun / mem_fun / mem_fun_refrandom_shuffle等等。 那些现在全部从C ++ 17标准库草案中删除,不会成为未来可移植C ++的一部分。

关于它的另一个文档: 编程语言C ++,库演化工作组 – 文档N4190 ,如果你想了解更多的信息。

你可以使用auto_ptr自动转换任何代码,通过使用unique_ptr代替:

任何使用auto_ptr代码都可以机械地转换为unique_ptr ,每当auto_ptr被“复制”时,都会插入move()

不,它不被弃用。 它可能是,如果C ++ 0x被接受。 而且实际上总是会得到支持。 我不相信从现实世界的C ++实现中抛弃了任何弃用的function。