1. 程式人生 > >c++中 子類物件與父類物件的記憶體關係

c++中 子類物件與父類物件的記憶體關係

 

問題:如題。假設有父類A與子類B

A例項化一個物件a   B例項化一個物件b

那麼在記憶體中 a與b的地址關係是什麼。是他們的首地址都一樣嗎?

解答:

他們是沒有必然關係的。就跟你隨便生成另外兩個其他型別的變數一樣。當然,你例項化的物件b跟A有關係。
b物件開頭的部分4個位元組是虛擬函式表,接著就是基類的資料成員,然後是子類的資料成員。
對方:C++中的類物件例項化後存在記憶體中的什麼位置,堆還是棧?
我(思索,但不確定): 既可能在棧又可能在堆
對方:什麼情況下在棧,什麼情況下在堆?
我:如果類物件例項作為區域性變量出現,放在棧中,作用域結束,類例項所佔記憶體釋放,如果是通過指標的形式 new class就在堆中建立,
在堆中的要手動刪除。
對方:棧的分配回收,誰來控制?
我:作業系統
對方:那還要類例項的解構函式做什麼?
我(有點暈)