我正在读这篇有趣的文章。 http://www.codeproject.com/Articles/746630/O-Object-Pool-in-Cplusplus
我无法理解这一行_firstDeleted = *((T **)_firstDeleted);
_firstDeleted
已有T*
类型。任何人都可以解释该声明的目的吗?
答案 0 :(得分:4)
当一个对象被销毁时,它的第一个sizeof(T*)
字节将被下一个自由对象的地址覆盖。
(也就是说,*T
实际上不再存储T
而是T*
,如果你看到我的意思。演员表演这种重新解释。这在形式上是相当不确定的。)
这具有删除的对象形成可用存储块的链表的效果。
重用此列表的对象内存意味着您不需要单独的空闲块列表。
答案 1 :(得分:2)
像*((T **)content) = _firstDeleted;
这样的代码被称为“引用类型惩罚指针”,即打破严格的别名规则,即未定义的行为。作者试图做的是_firstDeleted
指向未初始化的内存中的第一个“自由”对象,其中包含所有未定义的行为优点。
Modern C ++(尽管该文章于2014年发布)可能会使用更安全的设备进行未初始化的存储,例如the C++ standard library。