理解指针转换

Understanding pointer cast

我正在阅读这篇有趣的文章。 http://www.codeproject.com/Articles/746630/O-Object-Pool-in-Cplusplus

这行我看不懂_firstDeleted = *((T **)_firstDeleted);

_firstDeleted 已经有类型 T*。任何人都可以解释该声明的目的吗?

*((T **)content) = _firstDeleted; 这样的代码被称为 "deferencing a type-punned pointer",也就是打破了严格的别名规则,也就是未定义的行为。作者试图做的是让 _firstDeleted 指向未初始化内存映射中的第一个 "free" 对象,以及随之而来的所有未定义的行为优点。

现代 C++(即使该文章发表于 2014 年)可能会使用更安全的设施来存储未初始化的存储,例如 the C++ standard library

当一个对象被销毁时,它的前 sizeof(T*) 个字节被下一个空闲对象的地址覆盖。
(也就是说,*T 实际上不再存储 T,而是存储 T*,如果你明白我的意思的话。演员执行这种重新解释。它在形式上相当未定义。)

这具有已删除对象形成可用内存块链表的效果。

为该列表重用对象内存意味着您不需要单独的空闲块列表。