在C ++中处理表与原始指针和智能指针

时间:2014-04-18 20:04:17

标签: c++ pointers handles

我一直在阅读"游戏引擎架构 - 杰森格雷戈里"并发表声明:

  

句柄在很多方面都像智能指针一样,但它更简单   实施并且往往不太容易出问题。手柄是   基本上是一个全局句柄表的整数索引。手柄   反过来,table包含指向句柄的对象的指针   参考。要创建句柄,我们只需在句柄表中搜索   有问题的对象的地址,并将其索引存储在句柄中。

     格雷戈里,杰森;杰夫兰德;马特怀廷;兰德,杰夫; Whiting,马特   (2011-12-13)。游戏引擎架构(第D页)。 A. K. Peters。点燃   版。

然后,他给出了一个句柄表的骨架实现(其中句柄只是整数索引到指针数组中)。 除非您打算重新定位指向的内容,否则我真的不相信为什么你会使用句柄表和原始指针?

他确实说它允许你清空表中的一个条目,所有句柄都会自动反映出来。但是,您似乎仍需要具有预定的生命周期和所有对象的所有权,如果是这种情况,则应该可以简单地确保删除没有人指向它的对象(最好通过一些设计,最糟糕的情况可能是通过回调)。

智能指针将允许您拥有共享所有权,当然您可以在句柄表中存储引用计数,但我不相信(并且该书没有提供任何证据表明)这样做会更加运行时效率比使用说boost :: intrusive_ptr。

也许我错过了一些东西,但对我而言,它似乎更像是原始指针与智能指针之间的选择(取决于具体情况)是否生命周期非常明确(通过单一所有权),或者不是。

0 个答案:

没有答案