最近專案中遇到乙個討論的問題,就是容器裡面應該儲存是類物件,還是類指標,哪一種比較合適的問題。
**如下:
cimageinfo m_text_info;
for(int i=0; i<(int)m_vec_showinfo.size(); i++)
因為m_text_info是區域性變數,同事擔心這樣函式執行完,區域性變數在棧區的,容器裡面就沒有了資料了,應該儲存類指標:
回來查了資料。發現如下;
1:首先容器的元素型別是有要求的,第1個:元素型別要支援賦值運算,第2個:元素型別的物件必須可以複製,這兩個是基本要求,如果是類的話,還要提供預設建構函式才行。
2:容器新增元素時,系統是將元素賦值到容器裡,容器儲存的是原始資料的副本,是拷貝過來的,所以容器的元素和原始值沒有一點關係,所以上面程式就算元素值沒有了,容器元素還是存在的,不受任何影響。
下面說說容器裡面儲存類物件和類指標的區別:
1:效率問題,類物件的話push_back的時候會有拷貝構造的執行,而且類物件的資料很大的話,效能會差一點。指標會好一點,道理顯而易見,不過指標要自己new和delete,自己管理。不過資料顯示,類中資料不是很大的時候,這兩種效能差別可以忽略,因為stl的效能已經很好的了。
2:使用容器儲存類物件的時候,如果知道有多少個元素,最好提前初始化號容器大小,避免後面push_back的時候因為空間不夠,觸發容器從新開闢記憶體,而造成的效率降低。
3:容器在push_back的時候,如果容量不夠,就會從新定義記憶體,然後拷貝原來的資料過來,然後析構原來的物件,最後才會插入新的元素。可以做實驗看到這個現象。如果容量足夠,只會拷貝新元素進容器。
類物件和類指標的區別
對於類ctest 宣告 類物件ctest c1 利用類的建構函式在記憶體中分配一塊記憶體,呼叫了建構函式 類指標ctest pc1 是乙個記憶體位址值,指向記憶體中存放的類物件,沒有呼叫建構函式 引用成員 物件用 指標用 物件生命期 若是成員變數,則是類的析構函式來釋放空間 若是函式中的臨時變數,則...
類指標和類物件的區別
如下程式 include include using namespace std class student void set string str void print 態成員函式 print int student number 0 靜態資料成員初始化 int main int argc,cha...
類物件和類指標的區別
如下程式 include include using namespace std class student voidset string str void print 態成員函式 print int student number 0 靜態資料成員初始化 int main int argc,char...