C/C++技巧 自动链表
2023-06-06
7
0
使用C++的构造函数实现链表的自动链接
我们知道MFC为了加速消息处理,内部实现了消息的管理和派发。
但当消息产生时,是通过类的实例链表自动时行偿试处理。那么组成类的链表是怎么实现的?
我们知道,全局变量或者类的静态成员是在main函数之前初始化,其构造函数优先于main函数的调用。
所以当我们需要自动进行类的实例链表的时候,可以给类添加静态成员变量来实现。
类的静态成员优先于main构造,添加类面员的构造函数,在其内部实现链表的添加,也可在析构函数中对链表的断开,这样在程序远行的整个过程中,只要我们使用链表头,就可以获取全部已经构造了的类实例。
本设计思想来源于MFC的消息映射
typedef struct _LIST_STRUCT
{
static _LIST_STRUCT* pHead;
_LIST_STRUCT* pNext;
int a;
_LIST_STRUCT()
{
static int i = 0;
a = i++;
pNext = pHead;
pHead = this;
}
}LIST_STRUCT,*PLIST_STRUCT;
LIST_STRUCT* LIST_STRUCT::pHead = NULL;
LIST_STRUCT a;
LIST_STRUCT b;
LIST_STRUCT c;
int _tmain(int argc, _TCHAR* argv[])
{
for (LIST_STRUCT* p = LIST_STRUCT::pHead; p != NULL; p = p->pNext)
{
printf("%d\n", p->a);
}
return 0;
}