C++中的类可以利用构造函数作一些初始化的操作,也可以利用析构函数作一些清理的操作。而事实上C++中的结构体与类是极为相似的,它也支持构造函数和析构函数,所以可以考虑为结构体添加构造函数与析构函数,在构造函数中将节点计数加1而在析构函数中节点计数减1。这样就不需要在产生节点时将计数器加1在删除节点时将计数器减1,在使用这种结构体产生节点时只需要考虑申请结点空间和删除节点就可以了,而不必再顾及计数器的问题。
以上述思想修改后的代码如下:
#include <iostream>
using namespace std;
/* 结构体定义 */
typedef struct staticStruct
{
int data;
static int count; // 静态变量
struct staticStruct* next;
/* 构造器 */
staticStruct()
{
// 计数器加1
count++;
}
/* 析构函数 */
~staticStruct()
{
// 计数器减1
count--;
}
}STATICSTRUCT, *PSTATICSTRUCT;
int staticStruct::count = 0; // 初始化结构体静态变量值
void main()
{
PSTATICSTRUCT h;
cout << "第1节点创建前: START: " << staticStruct::count << endl;
/* 生成两个结构实例 */
PSTATICSTRUCT p = new STATICSTRUCT; // 第1个结构体
if(p)
{
h = p;
}
/* 输出当前结点中的count值 */
cout << "第1节点创建后: 1: " << h->count << endl;
p = NULL;
p = new STATICSTRUCT; // 第2个结构体
if(p)
{
h->next = p;
}
/* 输出两个结构中的静态成员值 */
cout << "第2节点创建后: 1: " << h->count << endl;
cout << "第2节点创建后: 2: " << h->next->count << endl;
/* 释放空间并输出count值 */
delete h->next;
cout << "第2节点删除后: 1: " << h->count << endl;
delete h;
cout << "第1节点删除后: END: " << staticStruct::count << endl;
}
编译并运行程序,可以发现程序运行结果与修改前的程序并无二致。