C++之全局对象、局部对象、静态对象详解
1.?對(duì)于全局對(duì)象,程序一開(kāi)始,其構(gòu)造函數(shù)就先被執(zhí)行(比程序進(jìn)入點(diǎn)更早);程序即將結(jié)束前其析構(gòu)函數(shù)將被執(zhí)行。
2.?對(duì)于局部對(duì)象,當(dāng)對(duì)象誕生時(shí),其構(gòu)造函數(shù)被執(zhí)行;當(dāng)程序流程將離開(kāi)該對(duì)象的聲明周期時(shí),其析構(gòu)函數(shù)被執(zhí)行。
3.?對(duì)于靜態(tài)(static)對(duì)象,當(dāng)對(duì)象誕生時(shí)其構(gòu)造函數(shù)被執(zhí)行;當(dāng)程序?qū)⒔Y(jié)束時(shí)其析構(gòu)函數(shù)才被執(zhí)行,但比全局對(duì)象的析構(gòu)函數(shù)早一步執(zhí)行。
4.?對(duì)于以new方式產(chǎn)生出來(lái)的局部對(duì)象,當(dāng)對(duì)象誕生時(shí)其構(gòu)造函數(shù)被執(zhí)行,析構(gòu)函數(shù)則在對(duì)象被delete時(shí)執(zhí)行。時(shí)執(zhí)行
靜態(tài)全局對(duì)象和一般的全局對(duì)象的區(qū)別就是一般的全局對(duì)象在程序的其他文件中可以通過(guò)關(guān)鍵字extern來(lái)調(diào)用,而static聲明的全局變量則只能在本文件中使用,這是鏈接性一個(gè)是外部的,一個(gè)是內(nèi)部的!注:關(guān)于1、2、3、4兩點(diǎn),做個(gè)例子程序驗(yàn)證一下:
class Demo1
{
public:
?????? Demo1()
?????? {
?????? }
?????? ~Demo1()
?????? {
?????? }
};
?
class Demo2
{
public:
?????? Demo2()
?????? {
?????? }
?????? ~Demo2()
?????? {
?????? }
};
class Demo3
{
public:
?????? Demo3()
?????? {
?????? }
?????? ~Demo3()
?????? {
?????? }
};
?
class Global
{
public:
?????? Global()
?????? {
?????? }
?????? ~Global()
?????? {
?????? }
};
?
// 聲明一個(gè)全局對(duì)象
Global gApp;
// 聲明一個(gè)靜態(tài)對(duì)象
static Demo1 demo1;
// 程序入口點(diǎn)
void main()
{
?????? //聲明一個(gè)局部對(duì)象
?????? Demo2demo2;
?????? Demo3*demo3 = new Demo3;
?????? delete demo3;
}四種不同對(duì)象生存方式(in stack、in heap、global、local static)
?????? 在C++中,有四種方法可以產(chǎn)生一個(gè)對(duì)象。
第一種方法是在堆棧(stack)之中產(chǎn)生:
void MyFunc()
{
?????? CFoofoo;??? // 在堆棧(stack)中產(chǎn)生foo對(duì)象
?????? ...
}第二種方法是在堆(heap)中產(chǎn)生:
void MyFunc()
{
?????? CFoo*foo = new CFoo;??? // 在堆(heap)中產(chǎn)生foo對(duì)象
?????? ...
}第三種方法是產(chǎn)生一個(gè)全局對(duì)象
CFoo foo;??? // 在任何函數(shù)之外作此操作第四種方法是產(chǎn)生一個(gè)局部靜態(tài)對(duì)象
void MyFunc()
{
?????? staticCFoo foo;??? // 在函數(shù)范圍之內(nèi)的一個(gè)靜態(tài)對(duì)象
?????? ...
}總結(jié)
以上是生活随笔為你收集整理的C++之全局对象、局部对象、静态对象详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言读取load格式文件,求指导,如何
- 下一篇: vc中调用其他应用程序的方法(函数) w