問題:如題。假設有父類A與子類B
A實例化一個對象a B實例化一個對象b
那麼在內存中 a與b的地址關係是什麼。是他們的首地址都一樣嗎?
解答:
他們是沒有必然關係的。就跟你隨便生成另外兩個其他類型的變量一樣。當然,你實例化的對象b跟A有關係。 b對象開頭的部分4個字節是虛函數表,接着就是基類的數據成員,然後是子類的數據成員。
對方:C++中的類對象實例化後存在內存中的什麼位置,堆還是棧? 我(思索,但不確定): 既可能在棧又可能在堆 對方:什麼情況下在棧,什麼情況下在堆? 我:如果類對象實例作爲局部變量出現,放在棧中,作用域結束,類實例所佔內存釋放,如果是通過指針的形式 new class就在堆中創建, 在堆中的要手動刪除。 對方:棧的分配回收,誰來控制? 我:操作系統 對方:那還要類實例的析構函數做什麼? 我(有點暈)