1

我在理解这两行代码时遇到了一些麻烦。

T* Result = Free;
Free = *((T**)Free);

其中 T 是模板类,Free 定义为;

T* Free;

它只是创建一个指向其他内存地址的新指针吗?

http://jfdube.wordpress.com/2011/10/06/memory-management-part-2-allocations-tracking/

这是 New() 函数内的 Freelist 类中的上下文。

4

1 回答 1

2
Free = *((T**)Free);

我认为这可以更清楚地写成:

Free = (T *) *Free;

这两个语句都依赖于未定义的行为,将 aT视为T *指针。从概念上讲,他们正在做的是分配*FreeFree. 例如,如果Twere int,则该语句将 an 重新解释int为指针,以int将其分配到原始指针之上。

至于这有什么意义,这取决于更大的背景。代码很粗略;这可能是天才,也可能是愚蠢。

于 2013-07-30T22:40:43.043 回答