c++和c的不同點之一在於c++通過類來定義物件,那麼物件何時產生,是否需要釋放呢???本篇文章將會針對物件的生命週期做出詳細介紹。關於物件的生命週期,我們需要了解類的建構函式,析構函式,拷貝建構函式,賦值運算子過載函式等等。(具體可以參照我的博文
首先我們給出以下**:
執行結果:#includeusing namespace std;
class test
test t5(90,90);
我們對上面**及其執行結果進行分析,可的如下結論:test(int) //普通構造t1
test(int) //普通構造t5
test(int) //普通構造t2
test(const test&) //t2拷貝構造t3
test(int) //普通構造t4
test(int) //普通構造臨時物件
operator= //臨時物件賦值t2
~test() //析構臨時物件
test(int) //普通構造臨時物件
operator= //臨時物件賦值t2
~test() //析構臨時物件
test(int) //普通構造臨時物件(隱式生成)
operator= //臨時物件賦值t2
~test() //析構臨時物件
test(int) //普通構造p1指向的無名物件
test(int) //普通構造p2指向的無名物件
test(int) //普通構造p2指向的無名物件
test(int) //普通構造臨時物件
~test() //析構臨時物件
test(int) //普通構造臨時物件
~test() //析構p1指向的無名物件
~test() //析構p2指向的無名物件
~test() //析構p2指向的無名物件
~test() //析構p4指向的無名物件
~test() //析構t3
~test() //析構t2
~test() //析構t4
~test() //析構t5
~test() //析構t1
擴充套件:
c 物件的生命週期
c 的new 運運算元和c 的malloc 函式都是為了配置記憶體,但前者比之後者的優點 是,new 不但配置物件所需的記憶體空間時,同時會引發構造式的執行。所謂構造式 constructor 就是物件誕生後第乙個執行 並且是自動執行 的函式,它 的函式名稱必定要與類別名稱相同。相對於構造式,自然就...
c 物件的生命週期
c 的new 運運算元和c 的malloc 函式都是為了配置記憶體,但前者比之後者的優點 是,new 不但配置物件所需的記憶體空間時,同時會引發構造式的執行。所謂構造式 constructor 就是物件誕生後第乙個執行 並且是自動執行 的函式,它 的函式名稱必定要與類別名稱相同。相對於構造式,自然就...
物件的生命週期
全域性物件的引用 雖然在c 不允許,但是cil的確允許分配全域性物件 靜態物件 靜態欄位的引用 應用程式的 庫的區域性物件的引用 傳遞進乙個方法的物件引數的引用 等待被終結的物件的引用 任何引用物件的cpu暫存器 要尋找不可達的物件,如果clr逐個檢查託管堆的沒乙個物件,很明顯,效率很低。每個物件都...