假设我VectorA
和VectorB
两个std::vector<SameType>
,两者都已启动(我的意思是VectorA.size() > 0
和VectorB.size() > 0
)
如果我这样做:
VectorA = VectorB;
自动释放为VectorA
分配的内存?
答案 0 :(得分:5)
在所有包含对象的析构函数被调用的意义上释放它,并且向量不再拥有内存。 1
但实际上,它刚刚返回allocator,可能会或可能不会将其返回到操作系统。
只要在使用的分配器中没有错误,您就没有创建内存泄漏,如果这是您关心的问题。
<小时/> <子> 1。正如@David在下面的评论中指出的那样,内存不一定要取消分配,具体取决于大小是否需要更改。
答案 1 :(得分:2)
一般来说,不一定是。将一个向量分配给另一个向量时,后置条件是两个数组在操作结束时将包含等效的对象。
如果目标向量的capacity
足够,可以通过调用min( v1.size(), v2.size() )
元素集上的赋值运算符来实现操作,然后破坏其余元素如果目标向量包含更多元素,或者复制构造末尾的额外元素。在这种情况下,不会进行内存释放或分配。
如果目标向量没有足够的容量,那么它将创建一个具有足够容量的新缓冲区,并且 copy-construct 来自源向量的新缓冲区中的元素。然后它将交换旧缓冲区和新缓冲区,销毁所有旧对象并释放旧缓冲区。在这种情况下,旧对象被销毁并释放旧内存,但这只是一种情况。