- 在传入的C ++标准中将不赞成使用auto_ptr吗?
- 应该将unique_ptr而不是shared_ptr用于所有权转让吗?
- 如果unique_ptr不在标准中,那么我是否需要使用shared_ptr?
Answers:
更新:此答案写于2010年,并且std::auto_ptr
已弃用。该建议是完全有效的。
在C ++ 0xstd::auto_ptr
中,不推荐使用std::unique_ptr
。智能指针的选择将取决于您的用例和要求,以及std::unique_ptr
具有单个所有权的移动语义,该语义可以在容器内使用(使用移动语义)以及std::shared_ptr
何时共享所有权。
您应该尝试使用最适合这种情况的智能指针,选择正确的指针类型可以使其他程序员深入了解您的设计。
不仅auto_ptr
不赞成在C ++ 11(D.10,1228页),它也将被删除, 在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
可以将任何代码using机械地转换为usingunique_ptr
,move()
只要auto_ptr
在“复制”时插入即可。
不,它不被弃用。如果C ++ 0x被接受,可能是这样。实际上,它将始终得到支持。我不认为任何不推荐使用的功能都没有从实际的C ++实现中删除。
auto_ptr
是标准的一部分,但使用量大大减少。从实际的角度来看,将其删除将大大减少影响。
<iostream.h>
比以前更多auto_ptr
,但是MS VC ++(仅此一种)不再提供它。