第3條 確保容器中的物件拷貝正確而高效

2021-08-16 17:43:31 字數 406 閱讀 3898

容器中儲存了物件,但並不是你提供給容器的那些物件。而當從容器中取出乙個物件時,你所取出的也並不是容器中所儲存的那份。當向容器中加入物件時,存入容器的是你所指定的物件拷貝。取出物件時,也是拷貝。

當然,在存在繼承關係的情況下,拷貝動作會導致剝離。(即導致派生類特有的部分丟失)

使拷貝動作高效、正確,並防止剝離問題發生的乙個簡單辦法是使容器包含指標而不是物件。

widget w[maxnumwidgets]; 

//建立了有maxnumwidgets個widget的陣列

//每個物件使用預設建構函式來建立

vectorw;

w.reserve(num);

讓他有足夠的空間容納物件,但並沒有建立物件。與陣列相比,stl容器要聰明的多。你讓它建立多少物件,它就(通過拷貝)建立多少物件。

條目三《確保容器中的副本物件高效而正確》

前兩天看的 海王 真的真的非常好看,全程無尿點。在stl中,底層操作的都是容器儲存的物件的副本。也即,對於stl而言,進去和出來都是乙個物件副本。而且在stl的所有操作也只是對儲存物件的副本的移動,刪除等。有副本的複製行為,證明必定有拷貝建構函式和賦值操作符過載函式的存在。如果我們沒有顯示的宣告定義...

as3中的容器

4種容器 array object vector dictionary 各自特點 array是索引陣列,雖然它也是動態類,可以等同於object來用,但是不建議這樣,因為沒有任何好處。除了鍵上的區別外,array還是善於隨機訪問的,但不知道object和dictionary和它在訪問速度上的區別有多...

C 中淺拷貝 深拷貝 物件的複製 物件的賦值

一 概念字面理解 1 淺拷貝 發生物件複製時,只是對對像張資料成員進行簡單的賦值。涉及到動態分配問題,如果按淺拷貝進行複製,不做特殊處理,複製完成後,兩個物件中涉及動態分配空間的變數,不管他們各自的空間,及空間中的內容都是完全一樣的,當對這兩個物件進行析構時,會發生同一片空間被釋放兩次,因而會出現錯...