C++之全局对象、局部对象、静态对象详解

1. 对于全局对象,程序一开始,其构造函数就先被执行(比程序进入点更早);程序即将结束前其析构函数将被执行。

2. 对于局部对象,当对象诞生时,其构造函数被执行;当程序流程将离开该对象的声明周期时,其析构函数被执行。

3. 对于静态(static)对象,当对象诞生时其构造函数被执行;当程序将结束时其析构函数才被执行,但比全局对象的析构函数早一步执行。

4. 对于以new方式产生出来的局部对象,当对象诞生时其构造函数被执行,析构函数则在对象被delete时执行。时执行

静态全局对象和一般的全局对象的区别就是一般的全局对象在程序的其他文件中可以通过关键字extern来调用,而static声明的全局变量则只能在本文件中使用,这是链接性一个是外部的,一个是内部的!

注:关于1、2、3、4两点,做个例子程序验证一下:

class Demo1

{

public:

       Demo1()

       {

       }

       ~Demo1()

       {

       }

};

 

class Demo2

{

public:

       Demo2()

       {

       }

       ~Demo2()

       {

       }

};

class Demo3

{

public:

       Demo3()

       {

       }

       ~Demo3()

       {

       }

};

 

class Global

{

public:

       Global()

       {

       }

       ~Global()

       {

       }

};

 

// 声明一个全局对象

Global gApp;

// 声明一个静态对象

static Demo1 demo1;

// 程序入口点

void main()

{

       //声明一个局部对象

       Demo2demo2;

       Demo3*demo3 = new Demo3;

       delete demo3;

}

四种不同对象生存方式(in stack、in heap、global、local static)

       在C++中,有四种方法可以产生一个对象。

第一种方法是在堆栈(stack)之中产生:

void MyFunc()

{

       CFoofoo;    // 在堆栈(stack)中产生foo对象

       ...

}

第二种方法是在堆(heap)中产生:

void MyFunc()

{

       CFoo*foo = new CFoo;    // 在堆(heap)中产生foo对象

       ...

}

第三种方法是产生一个全局对象

CFoo foo;    // 在任何函数之外作此操作

第四种方法是产生一个局部静态对象

void MyFunc()

{

       staticCFoo foo;    // 在函数范围之内的一个静态对象

       ...

}

你可能感兴趣的:(C++)