c++指標比較的不是位址,而是物件同一性問題。即指標位址可以不同,而比較的結果卻相同。
這個問題用多重繼承比較直觀;存在乙個從子類到任乙個基類的預定義轉化。乙個基類的指標是與其派生類的指標==的,並不是因為位址相同而是型別相同,因為派生類就是基類,就像班長就是學生一樣。(這從更抽象的乙個層次來對待指標)
乙個非常重要的經驗,處理指向物件的引用或指標時,必須小心避免丟失型別資訊(如把指標賦值給void*指標)。一旦複製到void *型別,就會去掉型別資訊,編譯器就別無他法,只好求助於原始位址比較了;而這樣的比較對於指向類物件的指標來說,很少會是正確的。
C 必知必會
條款2 多型 2 條款3 設計模式 5 條款4 stl 8 條款5 引用是別名而非指標 10 條款6 陣列形參 13 條款7 常量指標與指向常量的指標 16 條款8 指向指標的指標 19 條款9 新式轉型操作符 21 條款10 常量成員函式的含義 25 條款11 編譯器會在類中放東西 29 條款12...
C 必知必會 placement new
placement new placement new 是過載operator new的乙個標準 全域性的版本,它不能被自定義的版本代替 不像普通的operator new和operator delete能夠被替換成使用者自定義的版本 它的原型如下 void operator new size t,...
C 必知必會(4)
直接呼叫建構函式是行不通的,然而可以通過使用placement new來哄騙編譯器呼叫建構函式 void operatornew size t,void p throw placement new是operator new的乙個標準的過載版本,也位於全域性名字空間中,但和我們通常看到的operato...