dynamic cast, 指標初始化

2021-04-20 03:26:30 字數 828 閱讀 3934

rel="file-list" href="file:///c:%5cdocume%7e1%5cyaoyansi%5clocals%7e1%5ctemp%5cmsohtml1%5c01%5cclip_filelist.xml">開發時遇到的bug,寫出來做備忘。

先看下面這段**有什麼

bug? a

*a = geta(…);

if( a != null )

}

關於dynamic_cast:

對指標進行

dynamic_cast

,失敗返回

null

,成功返回正常

cast

後的物件指標;對引用進行

dynamic_cast

,失敗丟擲乙個異常,成功返回正常

cast

後的物件引用。因此可以用來在執行期間進行型別判斷。

可知:1.dynamic_cast

會丟擲異常

2.dynamic_cast

在轉型失敗時返回null

上面的**的

bug在這一句, b

*b = dynamic_cast

(a);

b 沒有被初始化。

當dynamic_cast丟擲異常時,並沒有對b 初始化,此時b不為null。用

if( b != null )無法判斷dynamic_cast是否成功。

結論:

應明確將

b初始化為

null:

a*a = geta(x, y);

if( a != null )

}

dynamic cast 動態操作

dynamic cast 動態操作 作用 將基類型別物件的引用或者指標轉換為同意繼承層次中其他型別的引用或者指標 注意事項 dynamic cast在執行時型別檢查。分為兩個操作 1.驗證被請求的轉換是否有效 2.進行轉換。為什麼驗證工作必須在執行時檢查?答 因為引用或者指標繫結的物件的型別在編譯時...

dynamic cast 安全轉換

上行轉換 子類指標轉父類指標 下行轉換 父類指標轉子類指標 上行轉換一定是安全的。即由子類指標轉為父類指標。下行轉換可能會有問題。對於上圖,a是父類 a 轉b 下行轉換,使用dynamic cast會得到null 即定義乙個物件 a 然後使用 dynamic cast 將其轉換為 b 下同。b 轉a...

2021 3 19初始指標

define crt secure no warnings 1 include int main int main int main int main int p arr 陣列名 首元素位址 int i 10 for i 0 i 10 i return 0 野指標 指標指向的位置是不可知的 隨機的,...