假設我有VectorA
和VectorB
兩個std::vector<SameType>
,既initilized(我的意思是VectorA.size() > 0
和VectorB.size() > 0
)內存重新分配使用的std ::矢量重新分配
如果我做的:
VectorA = VectorB;
的先前分配給VectorA
的內存是否會自動釋放?
假設我有VectorA
和VectorB
兩個std::vector<SameType>
,既initilized(我的意思是VectorA.size() > 0
和VectorB.size() > 0
)內存重新分配使用的std ::矢量重新分配
如果我做的:
VectorA = VectorB;
的先前分配給VectorA
的內存是否會自動釋放?
它在這個意義上,所有的析構函數包含的對象釋放被調用,向量不再擁有的內存。
但實際上,它只是回到了allocator,這可能會或可能不會實際將其返回到OS。
只要沒有在分配使用中的錯誤,您尚未創建一個內存泄漏,如果這是你關心的是什麼。
如果目標向量具有足夠的容量,則賦值不需要重新分配,複製和釋放舊緩衝區。它不需要銷燬舊對象,但可以使用*賦值運算符*來重寫第一個'min(v1.size(),v2.size())'元素(假設它不需要重新分配。 –
一般來說,不一定。當分配一個矢量到另一個,柱條件是兩個陣列將包含等效對象在操作的結束。
如果目標矢量的capacity
就足夠了,該操作可以通過調用賦值運算符該組min(v1.size(), v2.size())
元件,然後或者破壞該元件的其餘部分如果目標矢量保持多個元件來實現,否則拷貝構造末多餘的元素。在這種情況下,不會執行內存釋放或分配。
如果目標矢量不具有足夠的容量,那麼它會產生具有足夠的容量和一個新的緩衝區複製構造在離源向量的新緩衝區中的元素。然後它將交換舊的和新的緩衝區,銷燬所有舊的對象並釋放舊的緩衝區。在這種情況下,舊物被破壞,舊的內存釋放出來,但是這僅僅是一個案例。
是的,它被釋放。 – tuxuday