先來看乙個問題:類的空指標能不能呼叫類的成員函式呢?
class a
~a(){}
void func_1()
?為什麼會有這種情況呢接下來我們看看c ++的物件記憶體映像:
下圖是a的物件的記憶體布局
a這種基本的c ++物件模型有下述幾個規則:
因此,構成物件本身的只有資料,任何成員函式都不隸屬於任何乙個物件,非靜態成員函式與物件的關係就是繫結
,繫結的中介就是這個指標
。
//p的屬性是a的型別,p本身就就包含了除普通成員變數外的所有東西,有無具體引數只是相當於給this指標賦值
//普通成員資料 才是物件所擁有的,其他的都是p的
a *p=null;//null就相當於給this指標賦值
p->func_1();//因為func_1函式中並沒有呼叫具體物件用this指標呼叫的資料成員
//所以不會出錯
//若是函式中呼叫了this指標指向的資料成員,則會程式崩潰
程式的記憶體映像
一 程式的記憶體映像 乙個由c c 編譯的程式的記憶體分布分為以下幾個部分 1 棧 stack 也是我們所說的堆疊,是由編譯器自動分配釋放,用來存放函式引數值,函式的返回位址,非靜態區域性變數的值等。其操作方式類似於資料結構中的棧 後進先出 lifo 2 堆 heep 一般由程式設計師分配釋放,若程...
程式的記憶體映像
這幾天在看c語言的書籍,對c的記憶體映像有點疑惑,於是,查詢資料,查閱了龐麗萍編著的 作業系統原理 第四版中的第七章主存管理中的段式系統,此外還看了王元珍 曹忠生 韓忠芬編著的 80x86組合語言程式設計 得到了乙個自己對在80x86結構下的記憶體對映的理解。不過也許自己的理解是錯的或者有不到之處,...
linux c的記憶體映像
記憶體映像其實就是在記憶體中建立乙個和外存檔案完全相同的映像。使用者可以將整個檔案對映到記憶體中也可以部分對映到記憶體。系統會將對記憶體映像的改動如實的反映到外存檔案中。從而實現了通過記憶體映像對外存檔案的操作。記憶體映像的特點 1 可以加快對io的操作速度。2 使用者可以通過指針對檔案進行操作,間...