建立物件的過程(臨時物件)

2021-09-12 14:22:05 字數 2295 閱讀 9537

class cgoods

cgoods()

cgoods(float price)

cgoods(const cgoods& rhs)

/*const

1.防止實參被修改

2.接收隱式生成的臨時量

下面對執行結果分析:

cgoods good1("good1", 1, 1.1);;呼叫帶三個引數的建構函式(堆區)

cgoods good2("good2", 2, 2.2);呼叫帶三個引數的建構函式(堆區)

cgoods good3;呼叫不帶引數的建構函式(棧區)

cgoods good4(17.5f);呼叫帶乙個引數的建構函式(棧區)

cgoods good5("good5", 5, 5.5);呼叫帶三個引數的建構函式(棧區)

static cgoods good6("good6", 6, 6.6);呼叫帶三個引數的建構函式(堆區)

good3 = 17.5f;賦值運算子兩端資料型別不匹配,右側隱式生成臨時量,推演cgoods中有符合自身資料型別的建構函式,賦值運算子左側為已有的物件則不會優化,總的呼叫順序是首先生成臨時量呼叫帶乙個引數的建構函式,其次呼叫賦值運算子的過載函式,從位址可以看出,其次賦值完成,臨時量呼叫析構函式

good3 = cgood(17.5f);賦值運算子右側顯示生成臨時量,呼叫cgood中帶乙個引數的建構函式,然後同上。

good3 = (cgood)("good3", 3, 3.3);這裡包含乙個逗號運算子(用逗號分開的表示式的值分別結算,但整個表示式的值是最後乙個表示式的值),此時也就和顯式生成臨時量一樣了。

cgoods good7 = 17.5f;賦值運算子右側隱式生成臨時量,推演cgoods中有符合自身資料型別的建構函式,賦值運算子左側是生成新物件則會產生優化,以生成臨時物件的方式生辰新物件,故呼叫帶乙個引數的建構函式。(不需要呼叫賦值運算子過載函式)。

cgoods good8 = cgoods("good8", 8, 8.8);賦值運算子右側顯式生成臨時量,賦值運算子左側是生成新物件則會產生優化,以生成臨時物件的方式生成新物件,故呼叫帶三個引數的建構函式。

cgoods* pgood9 = new cgoods("good9", 9, 9.9);使用new關鍵字來生成新物件,新物件的位置在堆區,所以列印出的位址與上面的有很大差別,呼叫帶三個引數的建構函式。

cgoods* pgood10 = new cgoods[2];使用new關鍵字來生成物件陣列,所以會呼叫兩次帶三個引數的建構函式。

cgoods* pgood11 = &cgoods("good11", 11, 11.11);賦值運算子兩端資料型別不匹配,右側顯式生成臨時量,但是左側非物件,而是指標,將臨時物件的位址賦給指標pgood11,在;之後臨時物件就會釋放,呼叫順序是帶三個引數的建構函式、析構函式;這裡使pgood11成為野指標,所以應該p = null;

cgoods& rgood12 = cgoods("good12", 12, 12.12);賦值運算子右側顯式生成臨時物件,使用引用給臨時物件起別名,同時會使臨時物件的生命週期增長。

const cgoods& rgood13 = 17.5f;這裡要對臨時量進行說明,臨時量包括三種:

1.內建型別生成的臨時量是常量(臨時量,暫存器帶出來)。

2.自定義型別生成的臨時量是變數 ,在記憶體中。

3.隱式生成生成的臨時量是常量 ,顯式生成生成的臨時量是變數 。

所以當引用常量時必須使用const修飾,呼叫帶乙個引數的建構函式。

物件建立過程

過程一共有五步 類載入檢查 分配記憶體 初始化零值 設定物件頭 執行init 類載入檢查 檢查該物件所代表的的類是否已經被載入 解析和初始化過,沒有的話先執行類的載入過程 分配記憶體 在通過第一之後虛擬機器為物件分配記憶體。物件經過類載入之後大小就基本確定了,分配空間就是在堆中劃出一塊大小確定的記憶...

物件的建立過程

jvm查詢類的路徑,定位到.class檔案 載入.class檔案,有關靜態初始化的所有動作都會被執行 靜態初始化只在物件首次載入的時候進行一次 當用new建立物件的時候,在堆上為物件分配足夠的空間 儲存空間將會被初始化,自動為物件的所有基本資料型別設定成預設值,引用被置為null 執行所有出現於字段...

物件的建立過程

直接上 public class sup public sup static package com.test.resources public class sub extends sup public sub static public class test 父類靜態 塊 在父類的無參構造上面 父...