MFC 深入分析 shuhuan2009@gmail.com
C++的 new 运算子和 C 的 malloc 函数都是用于配置内存,但前者比后者的优点是
new
不但配置对象所需的内存空间,同时会引发构造函数的执行
。
所谓
构造函数
(constructor),就是对象诞生后第一个执行(并且是自动执行)的函数
它的函数名称必定要与类名称相同。
相对于构造函数,自然就有个
析构函数
(destructor),也就是在对象行将毁灭但未毁
灭之前一刻,最后执行(并且是自动执行)的函数,它的函数名称必定要与类名称相同,
再在最前面加一个 ~ 符号。
一个有着层次结构的类群组,当派生类的对象诞生时,构造函数的执行是由最基类
(most based)至最尾端派生类(most derived);当对象要毁灭之前,析构函数的执行则
是反其道而行。
结论:
1. 对于
全局对象
,程序一开始,其构造函数就先被执行(比程序进入点更早);程序即
将结束前其析构函数将被执行。
2. 对于
局部对象
,当对象诞生时,其构造函数被执行;当程序流程将离开该对象的声明
周期时,其析构函数被执行。
3. 对于
静态(
static
)对象
,当对象诞生时其构造函数被执行;当程序将结束时其析构函
数才被执行,但比全局对象的析构函数早一步执行。
4. 对于以 new
方式产生出来的局部对象
,当对象诞生时其构造函数被执行,析构函数则
在对象被 delete 时执行。
注:关于 1、2、3、4 两点,做个例子程序验证一下:
class Demo1
{
public:
Demo1()
{
}
~Demo1()
{
}
};
class Demo2
{
public:
Demo2()
{
}
~Demo2()
{
}
};