1.關于vptr和vtbl
虛函數表(Virtual table 或稱為vtbl),虛函數指針( Virtual pointer 或者稱為 vptr) 編譯器會為每個有虛函數的類創建一個虛函數表,該虛函數表將被該類的所有對象共享。類的每個虛成員占據虛函數表中的一行。如果類中有N個虛函數,那么其虛函數表將有N*4字節的大小。 由p指針指向vptr,再由vptr指向vtbl中的第n個指針,調用這個指針所指向的函數,由此實現了多態。 A* p = new B(); 多態的三個條件
2.靜態綁定和動態綁定
上圖是靜態綁定的情況 如果編譯器可以在編譯階段就完成綁定,就叫作靜態綁定或前期綁定。
上圖是動態綁定的情況 動態綁定是指編譯器在編譯階段不知道要調用哪個方法,直到運行時才能確定。
3.const關鍵字
使用const的好處在于它允許指定一種語意上的約束——某種對象不能被修改——編譯器具體來實施這種約束。通過const,你可以通知編譯器和其他程序員某個值要保持不變。只要是這種情況,你就要明確地使用const ,因為這樣做就可以借助編譯器的幫助確保這種約束不被破壞。上圖是const的調用規則。
4.重載new和delete
為什么有必要寫自己的Operator new和operator delete? 答案通常是:為了效率。缺省的operator new和operator delete具有非常好的通用性,它的這種靈活性也使得在某些特定的場合下,可以進一步改善它的性能。尤其在那些需要動態分配大量的但很小的對象的應用程序里,情況更是如此。
5.basic_string使用new(extra)擴充申請量
這便是一個重載new和delete實例
新聞熱點
疑難解答
圖片精選