是否应该优先使用boost :: shared_ptr优于普通指针(T *),反之亦然?
答案 0 :(得分:2)
我的一般规则是,当内存被大量传递并且很难说拥有该内存时,应该使用共享指针。 (注意,这也可能表示设计不佳,所以在你去共享指针之前先考虑一下。)如果你在一个地方使用共享指针,你应该尝试在任何地方使用它们。如果你不这样做,你必须非常小心你如何传递指针以避免双重释放。
如果您对内存的使用很简单并且显而易见拥有内存,那么只需使用普通指针即可。
通常项目越大,共享指针的好处就越多。关于这一点并没有严格的规定,也不应该存在。与许多开发决策一样,需要权衡利弊,你必须做最适合你的事情。
答案 1 :(得分:2)
近乎简单的指导原则 消除了记忆的可能性 泄漏是:始终使用名为smart的 指针变量来保存结果 新强>
答案 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)