C 中物件的生存週期

2021-08-11 04:11:08 字數 1851 閱讀 2421

在c中有變數的生存週期,那麼在c++中就有物件的生存週期。

(1)普通物件的生存週期

若有乙個cobject類,屬性是姓名和年齡。

cobject gobject1;

int main()

cobject gobject2;

函式呼叫的先後順序是:

建構函式:gobject1

gobject2

object1

object2

先構造全域性後構造區域性。

析構函式:object2

object1

gobject2

gobject1

先構造的後析構。

在堆上開闢乙個物件,生存週期為從new到delete,如果沒有delete,則不會析構。

cobject("object",1);//生成乙個臨時物件(顯式生成)

(2)臨時物件的生存週期

int main()

①呼叫預設建構函式。

②呼叫帶兩個引數的建構函式,顯式構造。

③相當於賦值,呼叫帶兩個引數的建構函式,運算子過載函式。生成物件時不知道物件名會生成臨時物件,臨時物件的生存週期是呼叫的那句完後';'後立馬析構。

④相當於初始化,無臨時物件生成,因為系統進行了優化,以構造臨時量的方法構造了object3。

cobject object1=cobject("object1",2);

cobject object2;

object2=(cobject)("object",2);//生成臨時物件,呼叫帶乙個引數的建構函式 <=>object2=cobject(2)

呼叫的函式:

帶兩個引數的建構函式

不帶引數的建構函式

生成臨時物件(帶乙個引數的建構函式)

賦值運算子過載函式

析構掉臨時物件的函式

cobject *pobject=&cobject("pobject",1);//生成1個物件,呼叫乙個構造,乙個析構

cobject &pobject=cobject("pobject",1);//生成乙個臨時物件,呼叫乙個構造,無析構

引用乙個臨時物件,臨時物件的生存週期就變成了引用這個物件的生存週期。

cobject object1=cobject("object1",2);

cobject object2=(cobject)("object2",2);//隱式構造

object1=2;//隱式生成臨時物件,呼叫帶乙個引數的建構函式,賦值運算子過載函式,析構函式

cobject object2=2;//隱式構造,無臨時物件生成(系統進行優化)

若有:

void fun1(cobject rhs){}

void fun2(cobject &rhs){}

void fun3(cobject *rhs){}

在main函式裡進行如下操作:

cobject object1;

fun1(object1);//無參建構函式,拷貝建構函式(實參穿形參)

fun1(cobject("pobject",1));//帶兩個引數的建構函式

fun2(object1);

fun2(cobject("pobject",1));//引用乙個臨時物件

生存週期延長

fun3(&object1);//可使用

fun3(&cobject("pobject",1));//可訪問

臨時量產生的型別:

1、內建型別,產生的臨時量是常量

2、類型別,產生的臨時量是變數

3、隱式產生的臨時量也是常量

賦值運算子的過載函式:

1、修飾形參不能改變

2、接受隱式產生的臨時量

C 中物件生存週期

在c 中,我們所使用的的物件都有嚴格的生存週期。所謂的物件生存週期是指物件從建立開始到被釋放為止的時間。對於靜態記憶體中儲存的區域性static物件 類static資料成員以及定義在任何函式之外的變數,全域性物件 任何函式之外的物件 在程式啟動時分配,在程式結束時銷毀 對於區域性static物件 類...

c 類物件的生存週期

在這裡我們會通過乙個例子來給大家解釋說明 include using namespace std class test public test int a 5,int b 5 ma a mb b cout 1 因為物件t1處於全域性中,所以t1最先被構造,呼叫建構函式 2 由於物件t5 也處於全域性...

物件的生存週期

在學習析構函式時,了解到一般物件的銷毀是在main函式內return之後。在棧上構造的物件要符合棧的先進後出的規則。堆上new的物件需要遇到delete的時候才能銷毀,否則會出現記憶體洩漏。所以一般的物件生存週期為定義點開始,return之後main函式退出之前結束。對於特殊的物件,總結如下 1 全...