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++之全局对象、局部对象、静态对象详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言读取load格式文件,求指导,如何
- 下一篇: 不删除旧版本java_Linux 卸载旧