C/C++技巧
+ -

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;
}

0 篇笔记 写笔记

链表LIST_ENTRY
Windows的内核开发者们自己开发了部分数据结构,比如说LIST_ENTRY。LIST_ENTRY是一个双向链表结构。它总是在使用的时候,被插入到已有的数据结构中。下面举一个例子。我构筑一个链表,这个链表的每个节点,是一个文件名和一个文件大小两个数据成员组成的结构。此外有一个FILE_OBJEC......
WDM 驱动中创建的设备链表
一个驱动加载后,可以根据需要创建多个设备,这些设备会以链表的形式连接起来,并且第一个设备的指针存放在DRIVER_OJECT的DeviceObject成员中。后续的设备会依次按DEVICE_OJBECT的NextDevice进行链表连接,直到最后一个为NULL.3: kd> dt _DEVI......
C/C++技巧 巧用链表
链表经常是使用的。比如说我们通常定义如下的结构体:typedef struct _DATA_STRUCT{ PDATA_STRUCT pNext; //下一个链表指针 static PDATA_STRUCT pFirst //第一个链表指针 //其它......
C/C++技巧 自动链表结构体
我们知道MFC为了加速消息处理,内部实现了消息的管理和派发。但当消息产生时,是通过类的实例链表自动时行偿试处理。那么组成类的链表是怎么自动实现的?我们知道,全局变量或者类的静态成员是在main函数之前初始化,其构造函数优先于main函数的调用。所以当我们需要自动进行类的实例链表的时候,可以给类添加静......
C/C++技巧 自动链表
使用C++的构造函数实现链表的自动链接我们知道MFC为了加速消息处理,内部实现了消息的管理和派发。但当消息产生时,是通过类的实例链表自动时行偿试处理。那么组成类的链表是怎么实现的?我们知道,全局变量或者类的静态成员是在main函数之前初始化,其构造函数优先于main函数的调用。所以当我们需要自动进行......
线程等待链表/调度链表
线程3种状态:正在运行就绪等待等待线程链表阻塞的线程在等待线程链表中。KTHREAD结构体中: +0x0d8 WaitListEntry : _LIST_ENTRY +0x0d8 SwapListEntry : _SINGLE_LIST_ENTRY当一个线程处于等待状......
Windows内核中的链表LIST_ENTRY与结构体
以下文章虽为转载,但也包含了本人的修改与测试验证。Windows内核中是无法使用vector容器等数据结构的,当我们需要保存一个结构体数组时,就需要使用内核中提供的专用链表结构LIST_ENTRY通过一些列链表操作函数对结构体进行装入弹出等操作,LIST_ENTRY是Windows内核中定义的......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!