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;    // 在函数范围之内的一个静态对象

       ...

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值