6

Suppose I have VectorA and VectorB are two std::vector<SameType>, both initilized (i mean VectorA.size() > 0 and VectorB.size() > 0)

If I do:

VectorA = VectorB;

the memory previosly allocated for VectorA is automatically freed?

4

2 回答 2

5

它在调用所有包含对象的析构函数的意义上被释放,并且向量不再拥有内存。1

但实际上,它只是返回给分配器,它可能会或可能不会真正将它返回给操作系统。

只要正在使用的分配器中没有错误,您就没有造成内存泄漏,如果这是您所关心的。


1.正如@David在下面的评论中指出的那样,内存不一定会被释放,这取决于大小是否需要改变。

于 2012-05-10T11:36:13.537 回答
2

一般来说,不一定。当您将一个向量分配给另一个向量时,后置条件是两个数组在操作结束时都将包含等效对象。

如果capacity目标向量min( v1.size(), v2.size() )_ _ _在最后。在这种情况下,不会进行内存释放或分配。

如果目标向量没有足够的容量,那么它将创建一个具有足够容量的新缓冲区,并从源向量复制构造新缓冲区中的元素。然后它将交换新旧缓冲区,销毁所有旧对象并释放旧缓冲区。在这种情况下,旧对象销毁,旧内存被释放,但这只是一种情况。

于 2012-05-10T11:59:08.353 回答