c 類物件的生存週期

2021-08-08 15:43:28 字數 1194 閱讀 8733

********************在這裡我們會通過乙個例子來給大家解釋說明****************************

#include using namespace std;

class test

{public:

test(int a = 5,int b = 5):ma(a),mb(b)

{ cout<

1:  因為物件t1處於全域性中,所以t1最先被構造,呼叫建構函式

2:由於物件t5 也處於全域性中,所以t5第二被構造,呼叫建構函式

3:在main函式中:t2在最前面,所以第三被構造,呼叫建構函式

4:物件t3呼叫拷貝建構函式(t3之前不存在),t2拷貝構造t3,所以第四被構造,呼叫拷貝建構函式

5:注釋//4這一行是重點:原本先呼叫建構函式產生臨時量(test(30,30)),在呼叫=運算子過載將臨時量賦給t4,在呼叫析構函式析構臨時量;

但是,這一過程會被編譯器給優化掉,不產生臨時量,直接構造新物件。所以,那一行的**的含義是:::直接呼叫建構函式構造t4

6:注釋//5這一行也是重點:由於t2之前已經存在,所以它的含義是:構造臨時物件,在呼叫賦值函式,最後在呼叫析構函式析構臨時量,注意不是析構t2物件。

7:注釋//6:呼叫顯式建構函式生成臨時量,在呼叫賦值函式,最後再析構臨時量

8:注釋//7:呼叫隱式建構函式生成臨時量,再呼叫賦值函式,最後在析構臨時量

9:注釋//8:呼叫建構函式產生物件,因為有new沒有delete所以當前不析構

10:注釋//9:呼叫兩次建構函式產生兩個物件,因為有new沒有delete所以當前不析構

11:注釋//10:呼叫建構函式產生臨時物件,在呼叫賦值函式,最後再析構p3

12:注釋//11:呼叫建構函式構造p4

13:注釋//12:析構p1所指堆上的物件

14:注釋//13:呼叫兩次析構函式析構p2所指堆上的兩個物件

15:最後析構:p4,t4,t3,t2,t5,t1。

接下來我們看一下列印的結果:

**************************大家可以根據結果再仔細分析推敲**********************************

C 類的生存週期

眾所周知,類是c 的核心,而對於類的生存週期的長短是受到很多因素影響,在這裡我從以下幾個方面來分析 類在.data段生成時的生存週期 類在棧區生成時的生存週期 類在堆區生成時的生存週期 為了體現各種情況下類的生存週期,我們寫乙個測試用例來直觀地感受。class cgoods 實現三種構造方式 乙個拷...

C 中物件的生存週期

在c中有變數的生存週期,那麼在c 中就有物件的生存週期。1 普通物件的生存週期 若有乙個cobject類,屬性是姓名和年齡。cobject gobject1 int main cobject gobject2 函式呼叫的先後順序是 建構函式 gobject1 gobject2 object1 obj...

物件的生存週期

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