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