- 在传入的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 ++(仅此一种)不再提供它。