【发布时间】:2020-05-19 11:48:08
【问题描述】:
这里有内存管理问题。
我得到一个结构体Test1 的vector,这个结构体包含一个map。在我的程序中,函数将在本地创建 Test1s,并使用本地创建的地图。
考虑以下代码:
#include <map>
#include <vector>
struct Vec3 {
float x, y, z;
};
struct Test1 {
int64_t a;
std::map<int, Vec3> mapy;
};
std::vector<Test1> global;
void ClearGlobal() {
global.clear();
}
void AddToGlobal() {
Vec3 test = { 1, 2, 3 };
std::map<int, Vec3> mapy;
mapy[1] = test;
global.push_back({ 10, mapy });
}
void main() {
AddToGlobal();
ClearGlobal();
}
我想知道当我清除那个向量时会发生什么?所有的结构也会从内存中释放出来吗?
【问题讨论】:
-
是的,每个
Test1及其成员都将被销毁。您的global向量的大小将设置为 0,但容量将与以前相同。 -
如果你想测试它,你可以编写一个析构函数
~Vec3(),它会打印一条诊断消息。 -
这取决于你所说的从记忆中解放出来是什么意思。向量(其缓冲区)使用的内存本身不会被释放,只会破坏对象(元素)。这种破坏也会破坏内部映射,这将释放它们动态分配的任何内存。
标签: c++ vector memory-management stdmap