當調用vector的push_back方法時,向量中的上一個對象正在被破壞,原因可能是什麼。在添加新對象時銷燬向量中的對象
template<typename type> void SomeList<type>::AddElement(type &inObject)
{
pList.push_back(inObject);// pList is member of my class Vector SomeList
}
當調用vector的push_back方法時,向量中的上一個對象正在被破壞,原因可能是什麼。在添加新對象時銷燬向量中的對象
template<typename type> void SomeList<type>::AddElement(type &inObject)
{
pList.push_back(inObject);// pList is member of my class Vector SomeList
}
該向量不會破壞該對象。它取代它。
例如:
vector< A> myVector; // Do some initialization, etc.
A myNewObject;
myVector[0] = myNewObject; // Replace the object.
這意味着賦值運算符(A & A::operator=(const A&)
)將被稱爲用於myVector[0]
。那裏沒有破壞。
當矢量本身被破壞,或者當內存被重新分配時(在這種情況下,複製構造函數也被用於將對象從舊位置複製到新位置,然後銷燬舊的那些)。
後來編輯 在的push_back情況下,破壞必須由一個重分配來確定。
如果您發佈了一些代碼,我們將有更好的機會幫助您。僅供參考,vector::push_back
可能會導致內部陣列重新分配,因此可能會增長。這是你的意思嗎?
它可能不是該對象本身被「摧毀」,而是在重新分配期間增加矢量大小時,該對象被複制,舊對象被清除。因此,在創造和銷燬控制程序流程中加入某些東西並不是一個好主意。爲此,我會建議另一個容器對象或smart_ptr
。
當載體的push_back方法是所謂的矢量以前的對象是越來越銷燬。這可能是什麼原因。
原因是std::vector
因此被指定。
當您不斷向元素添加元素時,某個點的內存容量已用完。然後它會分配一個新的內存儲備,將所有舊對象複製到那裏(加上發生時添加的對象),並銷燬舊對象。
std::vector
試圖通過「過度分配」來最小化這種情況,它分配的內存超過預期進一步增長所需的內存。 (查找capacity()
與size()
和reserve()
與resize()
以瞭解更多關於此的信息。)但是每個儲備可能在某個時間點被超過,然後它必須重新分配和複製。
如果你不想要這個,看看std::deque
std::list
。
一些代碼,請。矢量通常不會這樣做,所以在任何人都可以幫助您之前需要一些背景。 – 2010-05-14 13:32:08
@Marcelos編輯了代碼爲 – boom 2010-05-14 13:37:46
的查詢。將來,突出顯示您的代碼並單擊'101010'按鈕進行正確格式化。 – 2010-05-14 13:38:43