使用类向量时会遇到内存泄漏吗?(C++)

Can I encounter memory leaks when using vectors of classes? (C++)

本文关键字:泄漏 C++ 内存 遇到 向量      更新时间:2023-10-16

我在程序中使用了大量向量,我想避免内存泄漏。下面是一个包含我自己创建的类的向量示例。

vector<MyClass> objects;
objects = vector<MyClass>(10);

如您所见,我没有使用"new"运算符,并且向量不是指针类型。如果不以某种方式删除矢量,我仍然会遇到内存泄漏吗?如果是这样,如何删除向量并释放内存?

不,您不会以这种方式直接遇到与向量相关的内存泄漏。实际上,objects是一个具有自动存储持续时间的变量。这意味着您创建的变量将位于您创建它的作用域中。如果你在一个函数中创建了它,并且if/for/while/etc范围甚至原始块作用域,它将在同一作用域的末尾被清理,而无需你执行任何操作。

然后,没有什么可以阻止你的类本身泄漏,例如,如果你拥有一些内存的所有权,并且不把它作为你的类的实例释放。

内存泄漏定义为存在的内存,但由于丢失了指针,您再也无法访问内存。在循环中执行此操作,您将很快耗尽可用内存。

如果不使用 new 动态分配内存,则不会出现内存泄漏。

假设您在循环中向此向量添加实例。这会消耗大量内存。但这不是泄漏,因为你确切地知道你的记忆去了哪里。如果不再需要,您仍然可以释放它。