【发布时间】:2019-11-24 17:23:05
【问题描述】:
如果我使用动态分配的数组初始化一个向量,然后该向量超出范围并被释放,那么该向量是否从它正在包装的数组中释放内存? 更具体地说,假设我有一个示例函数:
std::vector<float> mem_test() {
unsigned char* out = new unsigned char[10];
for (int i = 0; i < 10; i++) {
out[i] = i * i;
}
std::vector<float> test_out(out, out + 10);
return test_out;
}
int main() {
std::vector<float> whatever = mem_test();
// Do stuff with vector
// Free vector
std::vector<float>().swap(whatever);
}
当从函数返回的向量超出范围或被手动释放时,底层动态分配的数组是否也会释放其内存?
【问题讨论】:
-
不,它没有。
test_out甚至不知道out是什么。 -
Remy 已经回答了您的问题。顺便说一句:我希望这是一个演示示例,您实际上并没有通过首先使用 new 创建一个数组然后将值复制到向量来填充向量。
-
@MikeMB 我确实指定它是一个示例函数:3
-
是的,但我并不担心示例函数。我担心示例演示的模式。只是想确保您实际上没有使用中间动态数组来初始化向量。
-
@MikeMB 我正在使用 stb_image.h(一个相当流行的开源库的一部分)将图像加载为动态分配的数组。然后,用向量包装它。因此,我选择在示例函数中演示一个简单的动态数组分配。我觉得你的担心似乎超出了这个问题的范围。