感觉因为constructor & destructor 的原因而从而选择实体或指针的原因感觉不多, 因为今天代入没有构造代价的struct 作为容器typename, 明天说不定也要为该struct 增加constructor.
使用实体的话, 我觉得有一个好处就是在多线程中可以使用粒度更加小的锁, 因为你只需要对取值函数内部上锁就够了,指针的话你起码要把指针的逻辑跑完才能解锁.
虽然使用实体增加了对 construct 和 destructor的成本, 但锁的范围变小了,性能也随着提高了. 毕竟现在的CPU核心越来越多了, 别让它们闲着性能才能上去.
如果业务处理是单线的话, 其实还是建议使用原始指针, 毕竟不需考虑锁的问题.
智能指针使用得当的话, 在多线程下, 可以实现和实体一样的锁操作粒度, 近乎原始指针的效率, 而且还不需要进行二元操作.
但只是对习惯用继承, 派生, 子类与父类之间强制转换来说, 又要从智能指针中取出原始指针作转换, 如果转换后要外送到下层逻辑进行处理又要对原始指针进行上锁, 和使用原始指针的初衷相背, 一点也不kiss, 一点也不爽. 智能指针的使用还是见仁见智吧.
不过智能指针还有一个不得不提的好处( 至少我认为是= = ), 在大量使用智能智针时, 会显现一些原始智针不会显现的问题, 通常是架构分层不清晰导致, 可以借此修正一下架构分层.
[ 本帖最后由 木头人 于 2010-2-9 23:47 编辑 ] |