1.c++繼承體系中內(nèi)存布局的padding是保留的,這是為了防止父類和子類互相賦值時(shí)出現(xiàn)語(yǔ)義錯(cuò)誤。
2.同樣由于內(nèi)部實(shí)現(xiàn)的差別,如padding或vptr的存在,慎用memset等內(nèi)存直接操作方式,c++標(biāo)準(zhǔn)沒有規(guī)定內(nèi)存的布局細(xì)節(jié)。
3.指向?qū)ο蟪蓡T的指針類型,其值是偏移值,這就產(chǎn)生一個(gè)問題,指向第一個(gè)成員的偏移值為0,空指針值也為0,必須對(duì)這種情況加以區(qū)分,實(shí)現(xiàn)策略是將指向成員的指針值(偏移)被加1,用以和空指針區(qū)分開來(lái),因此使用指向成員的指針值應(yīng)減1以得到真實(shí)的偏移。
X::*p=0 ;
X::*p=&X::first ;
2.同樣由于內(nèi)部實(shí)現(xiàn)的差別,如padding或vptr的存在,慎用memset等內(nèi)存直接操作方式,c++標(biāo)準(zhǔn)沒有規(guī)定內(nèi)存的布局細(xì)節(jié)。
3.指向?qū)ο蟪蓡T的指針類型,其值是偏移值,這就產(chǎn)生一個(gè)問題,指向第一個(gè)成員的偏移值為0,空指針值也為0,必須對(duì)這種情況加以區(qū)分,實(shí)現(xiàn)策略是將指向成員的指針值(偏移)被加1,用以和空指針區(qū)分開來(lái),因此使用指向成員的指針值應(yīng)減1以得到真實(shí)的偏移。
X::*p=0 ;
X::*p=&X::first ;