C 中的内存管理:清除向量与删除对象
在 C 中,了解如何管理内存至关重要。在处理向量和指针等动态数据结构时,适当释放分配的内存至关重要。
考虑以下代码示例:
<code class="cpp">tempObject obj1; tempObject obj2; vector<tempObject> tempVector; tempVector.pushback(obj1); tempVector.pushback(obj2); tempVector.clear();</code>
问题出现了,是否在vector会自动释放其内部对象占用的内存吗?
对于持有对象的向量
调用clear()时会销毁向量内的对象,但不会释放分配的内存。迭代向量元素并单独删除它们也无济于事。
要有效释放与向量关联的内存,您可以使用以下策略:
<code class="cpp">vector<tempObject>().swap(tempVector);</code>
这会创建一个没有分配内存的空向量,并将其与 tempVector 交换,有效地释放内存。
对于保存指向对象的指针的向量
该行为与保存指向对象的指针的向量类似。对象。对指针向量调用clear()将破坏指针,但不会破坏它们引用的对象。要释放内存,您有两种选择:
C 11 的Shrink_to_fit 函数
C 11 引入了shrink_to_fit 函数,可以在clear(之后调用) )。虽然理论上它会缩小向量的容量以适应其大小,但值得注意的是,这是一个非绑定请求,可能会被某些实现忽略。
以上是`vector::clear()` 是否释放存储在其中的对象的内存?的详细内容。更多信息请关注PHP中文网其他相关文章!