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