C++ 类的构造函数和析构函数
类的析构函数可以用来做简单的初始化数据,比如为变量赋值,指针赋NULL,数组和结构体清零等初始化操作。也可以对成员函数进行逗号初始化赋值,构造函数可以进行重载,但析构函数不能。以指针的形式初始化的类在函数结尾要delete指针才能调用到析构函数,而已结构体的形式初始化的类在其作用域结束后自动释放内存,调用析构函数。
测试使用的类
class Module_CPP
{
public:
Module_CPP():m_module_a(3),m_module_b(5),pm_module(NULL){};
Module_CPP(int number);
Module_CPP(int a,int b);
Module_CPP(const Module_CPP & x);
~Module_CPP();
void Init();
private:
int m_module_a;
int m_module_b;
char *pm_module;
};
构造函数可以使用传统函数的形式进行对成员函数的赋值,也可以收冒号的形式进行快速赋值。
测试代码:
Module_CPP::Module_CPP(int number)
{
m_module_a = number;
m_module_b = number * 2;
}
Module_CPP::Module_CPP(int a,int b):m_module_a(a),m_module_b(b),pm_module(NULL)
{
}
Module_CPP::Module_CPP(const Module_CPP & x):m_module_a(x.m_module_b),m_module_b(x.m_module_a)
{
cout << "copy constructor."<<endl;
}
Module_CPP::~Module_CPP()
{
m_module_a = 0;
m_module_b = 0;
pm_module = NULL;
cout << "APP exit" << endl
}
void Module_CPP::Init()
{
cout << "m_module_a is " << m_module_a << endl;
cout << "m_module_b is " << m_module_b << endl;
}
类的初始化与重载
测试方法
Module_CPP *pModule_1 = new Module_CPP();
Module_CPP *pModule_2 = new Module_CPP(4);
Module_CPP Module_1 = Module_CPP(5);
pModule_1->Init();
pModule_2->Init();
Module_1.Init();
执行结果
$ ./project.o
m_module_a is 3
m_module_b is 5
m_module_a is 4
m_module_b is 8
m_module_a is 5
m_module_b is 10
APP exit
$
指针的形式申请的类需要在使用结束时释放内存
Module_CPP *pModule_1 = new Module_CPP();
Module_CPP *pModule_2 = new Module_CPP(4);
Module_CPP Module_1 = Module_CPP(5);
pModule_1->Init();
pModule_2->Init();
Module_1.Init();
delete pModule_1;
delete pModule_2;
pModule_1 = NULL;
pModule_2 = NULL;
执行结果
$ ./project.o
m_module_a is