對象模型
vptr虛函數(shù)指針
若類對象中含有虛函數(shù),則在對象模型中會存在一根虛函數(shù)指針
vtbl虛函數(shù)表
虛函數(shù)指針指向一塊內存,稱為虛表
虛表的內容是一段地址,指向該類對象在實現(xiàn)多態(tài)過程中虛函數(shù)實際綁定的函數(shù)
this
模板方法
通過this指針調用虛函數(shù)指針指向虛表中實際對應的虛函數(shù)
動態(tài)綁定
動態(tài)綁定的實現(xiàn)需要滿足三個條件
1.使用指針調用
2.存在向上轉型
3.調用的是虛函數(shù)
const漫談
const對象可以調用const成員函數(shù)
const對象不可以調用non-const成員函數(shù)
non-const對象可以調用const成員函數(shù)
non-const對象可以調用non-const成員函數(shù)
const String str("hello world");
str.print();
如果當初設計String::print()時未指明const,那么上行便是經(jīng)由const對象調用non-const成員函數(shù),會出錯,絕非我們想要看到的結果。
當成員函數(shù)的const和non-const版本同時存在時:
const對象只會調用const版本
non-const對象只會調用non-const版本
new和delete
全局的new/delete
如果重載全局
::operator new(), ::operator new[]new()
::operator delete(), ::operator delete[]()
將影響整個項目
對于已經(jīng)有重載作為類成員的new/delete
使用::new ::new[] ... 即可強制使用全局版本的函數(shù)
作為類成員的new/delete
對于類成員 如果沒有定義成員new/delete
則會調用全局的new/delete
對于已經(jīng)定義了成員new/delete的類
可以使用::前綴強制調用全局new/delete
placement new()
basic_string使用的new(extra)擴充申請量
template<class chatT, class traits, class Allocator>
inline void* basic_string<charT, traits, Allocator>::Rep::operator new(size_t s, size_t extra)
{
return Allocator::allocate(s + extra * sizeof(charT));
}
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。