大家應(yīng)該還記得码耐,在之前的博客中,我們使用了兩種實(shí)例化對(duì)象的方法檀夹,一個(gè)是從棧中筋粗,另一個(gè)是從堆中。其中炸渡,從堆中實(shí)例化對(duì)象的方法是這樣的:
Stutent *p = new Student();
之前我們并沒(méi)有細(xì)說(shuō)這一個(gè)語(yǔ)句的具體意思娜亿。下面就來(lái)給大家解釋一下。等號(hào)左邊我們定義了一個(gè)Stutent類型的指針p蚌堵,然后在等號(hào)右邊买决,用new運(yùn)算符向系統(tǒng)申請(qǐng)了一段內(nèi)存,然后讓p指針指向這段內(nèi)存吼畏,這段內(nèi)存存放的就是Student類的一個(gè)對(duì)象督赤。此時(shí),由于p指針指向的是一個(gè)對(duì)象泻蚊,所以我們將它稱為“對(duì)象指針”躲舌。
通過(guò)這樣的方式完成實(shí)例化對(duì)象之后,如果想要訪問(wèn)對(duì)象中的數(shù)據(jù)成員或者成員函數(shù)性雄,可以使用兩種方法没卸,我們假設(shè)類中有公有數(shù)據(jù)成員m_iX和成員函數(shù)setX():1.p->m_iX羹奉,p->setX(),這樣的訪問(wèn)方式我們?cè)谥熬徒?jīng)常用到约计,中間用的是一個(gè)指向符號(hào)诀拭;2.(p).m_iX,(p).setX()煤蚌,我們之前沒(méi)有介紹過(guò)這樣的訪問(wèn)方式耕挨,但是大家應(yīng)該也能類比我們之前從棧中實(shí)例化對(duì)象的訪問(wèn)方法,在這里尉桩,(*p)就代表了一個(gè)對(duì)象俗孝。
定義一個(gè)指針對(duì)象,不僅可以指向一個(gè)剛剛申請(qǐng)了內(nèi)存空間的新的對(duì)象魄健,還可以指向之前已經(jīng)實(shí)例化完成的對(duì)象赋铝,比如像這樣:
Stuent stu;
Student *p = stu;
這樣,我們就讓指針p指向了對(duì)象stu沽瘦,之后我們用p指針訪問(wèn)對(duì)象中的成員革骨,和用stu訪問(wèn)對(duì)象中的成員效果一樣。值得注意的是析恋,由于第二行定義指針時(shí)并沒(méi)有實(shí)例化新的對(duì)象良哲,所以在執(zhí)行這一句代碼時(shí)不會(huì)調(diào)用構(gòu)造函數(shù)。而且在最后助隧,也不需要使用delete去釋放空間筑凫,因?yàn)槲覀兏緵](méi)有向系統(tǒng)申請(qǐng)內(nèi)存。
以上就是有關(guān)對(duì)象指針的內(nèi)容并村,下一篇我將介紹對(duì)象成員巍实。