auto_ptr是否被弃用?
- auto_ptr会在传入的C ++标准中被弃用吗?
- unique_ptr应该用于所有权转移,而不是shared_ptr?
- 如果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_ptr
,bind1st
/bind2nd
,ptr_fun
/mem_fun
/mem_fun_ref
,random_shuffle
等等。 那些现在全部从C ++ 17标准库草案中删除,不会成为未来可移植C ++的一部分。
关于它的另一个文档: 编程语言C ++,库演化工作组 – 文档N4190 ,如果你想了解更多的信息。
你可以使用auto_ptr
自动转换任何代码,通过使用unique_ptr
代替:
任何使用
auto_ptr
代码都可以机械地转换为unique_ptr
,每当auto_ptr
被“复制”时,都会插入move()
。
不,它不被弃用。 它可能是,如果C ++ 0x被接受。 而且实际上总是会得到支持。 我不相信从现实世界的C ++实现中抛弃了任何弃用的function。