2014-09-01 56 views
24

5.2.7/7沿說的東西線:dynamic_cast <void*>什麼時候有用?

如果T是「指針cv void」,結果是指向最派生類指向x

這種synatx有什麼好的應用?何時應該使用dynamic_cast<void*>

+0

這裏是什麼MSalters是描述如下示例:http://ideone.com/84U5ax – 2014-09-01 18:36:01

+0

我覺得分配器可以利用這個(內存管理)。例如。如果你需要一塊內存的起始地址,但你只有一個指向基類的指針。 – dyp 2014-09-01 20:05:55

+0

@dyp:如果你已經有一個對象,它的內存必須已經被分配,所以分配器不能再分配它。而對於釋放,你需要的不僅僅是基地址,你需要的派生類型最多,所以你可以運行所有的析構函數。 – MSalters 2014-09-01 20:15:44

回答

26

一個常見原因是弄清楚兩個接口IA*IB*實際上是指向相同底層對象的指針。如果您需要,請使用演員表。

IIRC,甚至有可能在具有重複非虛擬基的多重繼承的情況下,有兩個指針指向兩個不同的IA子對象,這兩個指針比較不等,但指向相同的對象。

+1

我不明白'dynamic_cast (ptr)'和'static_cast (ptr)'(因爲void *沒有任何RTTI或vtable)之間有什麼區別...... – 2014-09-01 17:44:03

+0

@BasileStarynkevitch'ptr'是類類型的指針,所以它可以有RTTI。 – Oktalist 2014-09-01 19:29:58

+0

所以'void *'是一個通用指針,所以沒有任何RTTI,恕我直言。 – 2014-09-01 19:31:02

5

當你有這樣的:

template<typename X, typename Y> 
bool operator==(const X* px, const Y* py) { 
    return dynamic_cast<void*>(px) == dynamic_cast<void*>(py); 
} 
+1

這裏沒有多餘的'return'嗎? – Morwenn 2014-09-01 18:58:44

+0

你正在鑄造'const'。 – Oktalist 2014-09-01 19:26:13

相關問題