dic*_*oce 12 c++ smart-pointers raii reference-counting c++03
我一直在评估各种智能指针实现(哇,有很多),在我看来,大多数可以分为两大类:
1)此类别对引用的对象使用继承,以便它们具有引用计数,并且通常实现up()和down()(或它们的等价物).IE,要使用智能指针,您指向的对象必须从ref实现提供的某些类继承.
2)此类别使用辅助对象来保存引用计数.例如,不是将智能指针指向对象,而是实际指向此元数据对象...谁具有引用计数以及up()和down()实现(并且通常为指针提供一种机制)获取指向的实际对象,以便智能指针可以正确实现operator - >()).
现在,1有一个缺点,它强制你想引用的所有对象计数从一个共同的祖先继承,这意味着你不能使用它来引用你无法控制源代码的计数对象至.
2有一个问题,因为计数存储在另一个对象中,如果你有一个指向现有引用计数对象的指针被转换为引用的情况,你可能有一个错误(IE,因为计数不在实际的对象,新的引用没有办法得到计数...引用ref复制构造或赋值是好的,因为它们可以共享count对象,但如果你必须从指针转换,你'完全被冲洗了)...
现在,正如我所理解的那样,boost :: shared_pointer使用了机制2,或类似的东西......那就是说,我不能完全决定哪个更糟糕!我只使用机制1,在生产代码中......有没有人有这两种风格的经验?或许还有另一种方式比这两种方式更好?
Aar*_*ron 26
"在C++中实现智能指针的最佳方法是什么?"
不要忘记我在上面不完整的清单中遗忘的任何事情.
我已经使用boost :: shared_ptr好几年了,虽然你正确的下行(没有通过指针可能的任务),我认为这绝对是值得的,因为它节省了大量与指针相关的错误.
在我的自制游戏引擎中,我尽可能地用shared_ptr替换了普通指针.如果你通过引用调用大多数函数,那么性能上升的原因实际上并不是那么糟糕,因此编译器不必创建太多临时的shared_ptr实例.