1、c++ new运算和C的malloc函数都是为了配置内存,前者优点是:new配置了内存空间,同时会引发构造式的执行。
派生类对象诞生之时,构造函数的执行是由最基础类别至最末端衍生类别,对象析构之前,析构函数的执行是又最末端的衍生类别到最基础的类别。
2、全局对象,程序一开始构造函数就先被执行(比main函数更早),程序即将结束前其析构函数被执行。局部对象,诞生时,构造函数执行,程序流程将离开该对象的范围时,析构函数被执行。
3、对于静态对象,当对象诞生时构造函数被执行。当程序即将结束时析构函数才被执行(但比全局对象的析构函数早一步执行)。
4、对于已new方式产生出来的区域对象,当对象诞生时其构造函数被执行,析构函数则在对象呗delete时执行。
四种不同的对象生存方式(in stack、in heap、global、local static)
in stack:
堆栈之中产生:
void MyFunc()
{
CFoofoo;//在堆栈(stack)中产生foo对象
}
in heap:
堆积(heap)中产生:
void MyFunc()
{
CFoo* pfoo = new CFoo();//在堆积(heap)中产生pfoo对象
}
global:
产生一个全局对象(必然是个静态对象):
CFoo foo;//在任何函数范围之外做此动作
local static:
产生一个局部静态变量:
void MyFunc()
{
static CFoo pfoo ;//在函数范围(scope)之内的一个静态对象
}
对上述方法,不论任何一种做法,c++都会产生一个针对CFoo构造函数的调用。