2013-04-14 48 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对象的虚表指针。

相关问题