是的std ::矢量内存在明显的释放?(Is std::vector memory freed up

2019-07-05 19:10发布

假设我有结构的一个std :: vector的。 如果向量是明确的()发生了什么记忆'D'

std::vector<myStruct> vecs;
vecs.resize(10000);
vecs.clear();

将所述存储器被释放,或仍连接到血管内皮细胞变量作为可重复使用的缓冲器?

Answer 1:

所述存储器保持附接至载体中。 如果你想释放它,通常是用空载体交换。 C ++ 11还增加了shrink_to_fit一种旨在大致更直接提供同样的能力成员的功能,但它的不具约束力的(换句话说,它可能释放额外的内存,但仍没有真正要求这样做)。



Answer 2:

Vector的内存不能保证被清除。 你不能安全地访问后明确的元素。 为了确保被释放斯科特迈尔斯内存建议这样做:

vector<myStruct>().swap( vecs );

Cplusplus.com具有以下就此说:

删除Vector所有元素,调用各自的析构函数,离开容器的大小为0。

矢量能力并没有改变,也没有重新分配发生因调用这个函数。 强制再分配的典型方法是使用交换:...



Answer 3:

调用析构函数的对象,但内存保持分配。



Answer 4:

不,内存没有释放。

在C ++ 11,则可以使用shrink_to_fit方法力矢量以释放内存。

http://www.cplusplus.com/reference/vector/vector/



文章来源: Is std::vector memory freed upon a clear?