了解指针强制转换
Understanding pointer cast
我正在阅读这篇有趣的文章。 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++标准库。
相关文章:
- 转换指针引用的字符串
- 无法向上转换指针到指针参数
- 混合转换指针和引用
- 堆栈对象的强制转换指针
- 基类到派生模板类的强制转换指针,而不知道类型
- 删除类型转换指针的最佳方法
- 管理到本机值类转换:强制转换指针是否安全?
- 转换指针类型
- 为什么函数不能正确强制转换指针(从基类到派生类)
- 当我们递增下面的类型转换指针时会发生什么?
- 类型强制转换指针构造函数调用
- 如何转换(指针向量)-->(指向指针数组的指针)
- 如何从类功能转换指针
- 在C++对象中:我应该使用父类强制转换指针,还是应该使用实际类本身进行强制转换
- Delphi中的类型转换指针添加
- C++分段错误(核心转储)错误 - 强制转换指针/将函数值返回到线程
- 以C++和运算符优先级键入指向数组成员的强制转换指针
- C++动态强制转换指针的内存清理
- 转换指针和引用的好处
- 在c++中转换指针