了解指针强制转换

Understanding pointer cast

本文关键字:转换 指针 了解      更新时间:2023-10-16

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

我听不懂这句话_firstDeleted = *((T **)_firstDeleted);

_firstDeleted已经有类型 T* .谁能解释一下这句话的目的?

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

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

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

*((T **)content) = _firstDeleted;这样的代码被称为"引用类型双关指针",也就是打破严格的混叠规则,也就是未定义的行为。 作者试图做的是_firstDeleted指向未初始化内存映射中的第一个"自由"对象,以及随之而来的所有未定义行为的好处。

现代C++(即使这篇文章发表于 2014 年)可能会使用更安全的工具来进行未初始化的存储,例如C++标准库。