C++中,ClassTest objTest;就已經(jīng)構(gòu)造了對(duì)象,分配了空間;而在C#,Java中ClassTest objTest;只是聲明,并沒(méi)有分配空間。
在C++中,ClassTest objTest;是在棧上分配空間,ClassTest *pobjTest = new ClassTest;是在堆上分配空間。
棧分配的空間自動(dòng)回收,堆分配的空間需要手動(dòng)回收。
那么對(duì)于C++類中數(shù)據(jù)成員為類類型時(shí),定義為對(duì)象還是定義為指針,用哪種方法,并沒(méi)有絕對(duì)的情況,需要根據(jù)具體情況具體分析。
本質(zhì)上是對(duì)象分配區(qū)域的問(wèn)題,前者是在棧(stack)上分配空間,后者是在堆(heap)上分配空間。
一般來(lái)說(shuō),可以定義為對(duì)象,在如下情況考慮把數(shù)據(jù)成員定義成指針,
1)有多態(tài)的情況;會(huì)用到虛函數(shù),基類指針
2)可能和別的類共享,或者只是引用別的類里的某個(gè)對(duì)象,所以生命周期不是很確定(這個(gè)可以考慮智能指針)
3)大數(shù)據(jù)類,如果定義成對(duì)象,會(huì)導(dǎo)致當(dāng)前對(duì)象無(wú)法在棧內(nèi)創(chuàng)建
posted on 2012-11-18 21:52
水 閱讀(4739)
評(píng)論(4) 編輯 收藏 引用 所屬分類:
c/c++基礎(chǔ)知識(shí)