2013-04-14 50 views
1

假設我沒有使用多繼承或虛繼承,C++標準是否保證如果我將Derived*轉換爲Base*這兩個指針的值將完全相同?例如,即使Derived和/或Base具有虛擬功能,以下代碼是否始終會呼叫success()如果我將派生指針轉換爲基指針,兩個指針是否保證具有相同的值?

Derived* d = new Derived; 
Base* b = d; 
if (((void*)b) == ((void*)d)) 
    success(); 
else 
    failure(); 
+1

據此,原始指針不保證是相同的:http://stackoverflow.com/questions/6943892/difference-in-memory-layout-of-pointer-to-base-and-pointer- to-derived-object – maditya

+0

指針最初可能相等,但如果某人稍後進入並對代碼進行一些維護並且它們不再相同,會發生什麼? –

回答

2

如果基類沒有虛函數和派生類確實,指針將可能是不同的,因爲基類不會有存在於D對象的虛表指針。

相關問題