关于C++四种对象

对象生命周期判断:

1 对于全局对象,程序一开始,其构造函数就先被执行(比程序进入点更早);程序即将结束前其析构函数被执行。
2 对于局部对象,当对象诞生时,其构造函数被执行;当程序流程将离开该对象的存活范围(以至于对象将毁灭)时,其析构函数被执行。
3 对于静态对象,当对象诞生时,其构造函数被执行;当程序将结束时(此对象因而将遭致毁灭)其析构函数才被执行,但比全局对象的析构函数要早一步执行。
4 对于以new方式产生出来的局部变量,当对象诞生时其构造函数被执行。析构函数则在对象被delete时执行。

对象生存方式(in stack, in heap, global, local static)
1.
void MyFunc()
{
    CFoo foo; //在堆栈(stack)中产生foo对象
}
2.
void MyFunc()
{
    CFoo* pFoo = new CFoo(); //在堆(heap)中产生对象
}
3.
CFoo foo; //在任何函数范围之外做此操作
4.
void MyFunc()
{
    static CFoo foo; //在函数范围(scope)之内的一个静态对象
}
        前两种情况,C++在配置内存--来自堆栈(stack)或栈(heap)--之后立刻产生一个隐藏的构造函数调用。第三种情况(静态全局对象)的构造函数调用必须靠startup代码帮忙。Startup代码是更早于程序进入点(main或WinMain)执行起来的代码,由C++编译器提供,被链接到你的程序中。Startup代码可能做些像函数库初始化,进程信息设立,I/O stream产生等等操作,以及对static对象的初始化操作,也就是调用其构造函数。第四种情况(局部静态对象)相当类似C语言中的静态局部变量,只会有一个实例(instance)产生,而且在固定的内存上(既不是stack也不是heap)。它的构造函数在控制权第一次转移到其声明处(也就是在MyFunc第一次被调用)时被调用。

posted on 2005-06-15 15:18  中士  阅读(204)  评论(0编辑  收藏  举报

导航