使用指南:共享指针与普通指针

时间:2009-08-11 14:36:10

标签: c++

是否应该优先使用boost :: shared_ptr优于普通指针(T *),反之亦然?

3 个答案:

答案 0 :(得分:2)

我的一般规则是,当内存被大量传递并且很难说拥有该内存时,应该使用共享指针。 (注意,这也可能表示设计不佳,所以在你去共享指针之前先考虑一下。)如果你在一个地方使用共享指针,你应该尝试在任何地方使用它们。如果你不这样做,你必须非常小心你如何传递指针以避免双重释放。

如果您对内存的使用很简单并且显而易见拥有内存,那么只需使用普通指针即可。

通常项目越大,共享指针的好处就越多。关于这一点并没有严格的规定,也不应该存在。与许多开发决策一样,需要权衡利弊,你必须做最适合你的事情。

答案 1 :(得分:2)

  

近乎简单的指导原则   消除了记忆的可能性   泄漏是:始终使用名为smart的   指针变量来保存结果   

- boost::shared_ptr documentation

答案 2 :(得分:1)

除非您正在构建智能指针(不要),否则您可能不应该使用RAW指针(这会导致疯狂)。

有一套针对不同情况的智能指针:
性病:: auto_ptr的:
std :: tr1 :: shared_ptr AKA(boost :: shared_ptr)
提高:: scoped_ptr的
boost :: weak_ptr

Smart Pointers: Or who owns you baby?

传递指针的唯一原因是传递对可能为NULL的对象的引用(否则使用引用),即 NOT 仅仅使用对象传递所有权(和如果你传递的NULL可能你应该查看代码并询问原因。

std容器不能很好地处理引用,因此您可以将指针指向标准容器中其他人拥有的对象(请参阅Using abstract class as a template type