[英]Order of members, order of derivation matters?
有時我碰到過這個問題,每當我更改成員的順序,C ++類中的派生順序時,問題都會得到解決,崩潰會得到解決。
最近,我將私有成員變量的位置從班級的較低位置移到了班級頂部,並且錯誤已得到解決。
還有一次我有A類:公共B,公共C。當我將其更改為A類:公共C,公共B時,崩潰代碼開始起作用。 C是包含虛擬方法的類,在前一種情況下,類A找不到C中重寫的方法,但在后來的情況下,它可以找到。 這是由於虛擬指針損壞嗎? 如果是這樣,那與會員順序有什么關系? 我知道更改成員順序時內存布局會發生變化,但是我們如何調試此類問題,因為在VS2008中我找不到任何有關崩潰發生原因的指示?
注意:基類B和C完全獨立,彼此之間沒有依賴關系
基類和成員對象按聲明順序(而不是初始化列表的順序)初始化。
如果其中一個基址接收到指向另一個基址對象的指針,並且除了將指針存儲以供以后在其構造函數中使用外,其他任何操作,那么ctor將訪問尚未構造的對象。
在MSVC / VS下使用/W3
警告級別,應在this
其傳遞到指向尚未初始化的對象的一部分的基本ctor以及將初始值設定項列表改組以匹配聲明順序時發出警告。
可能性:
調試步驟:
可能是您定義了一個數組:int A [M]。 M小於您在代碼中使用的M。 我今天也有這個麻煩。 我定義了布爾mMyArray [6];
但是,在我的代碼中,我在某處使用了mMyArray [7] = false;。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.