C++ C++;使用数组初始化时的STL向量内存管理?
如果我用一个动态分配的数组初始化一个向量,那么稍后该向量将超出范围并被释放,该向量是否会从它所包装的数组中释放内存? 更具体地说,假设我有一个示例函数:C++ C++;使用数组初始化时的STL向量内存管理?,c++,arrays,memory,vector,C++,Arrays,Memory,Vector,如果我用一个动态分配的数组初始化一个向量,那么稍后该向量将超出范围并被释放,该向量是否会从它所包装的数组中释放内存? 更具体地说,假设我有一个示例函数: 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<
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);
}
std::vector mem_test(){
unsigned char*out=新的unsigned char[10];
对于(int i=0;i<10;i++){
out[i]=i*i;
}
标准:向量测试输出(输出,输出+10);
返回测试输出;
}
int main(){
std::vector whatever=mem_test();
//用向量做东西
//自由向量
std::vector().swap(无论什么);
}
当函数返回的向量超出范围或手动释放时,底层动态分配的数组是否也会释放内存
向量是否从它正在包装的数组中释放内存
向量根本不包裹数组
当函数返回的向量超出范围或手动释放时,底层动态分配的数组是否也会释放内存
否。您正在使用一个构造函数构造向量,该构造函数以2个迭代器作为输入。它遍历源数组,将其元素的值复制到向量的内部数组中。源数组本身是分开的,必须在mem_test()
退出之前明确地delete[]
'd,否则它将泄漏
std::vector mem_test(){
unsigned char*out=新的unsigned char[10];
对于(int i=0;i<10;i++){
out[i]=i*i;
}
标准:向量测试输出(输出,输出+10);
删除[]out;//不,不知道。test\u out
甚至不知道out
是什么。Remy已经回答了你的问题。顺便说一句:我希望这是一个演示示例,你并不是通过先创建一个新数组然后将值复制到向量来填充向量。@MikeMB我确实指定了一个示例函数:3是,但我不担心示例函数。我担心的是示例演示的模式。我只是想确保您实际上没有使用中间动态数组来初始化向量。@MikeMB我使用的是stb_image.h(相当流行的开源库的一部分)将图像加载为动态分配的数组。然后,用向量将其包装。因此,我选择在示例函数中演示一个简单的动态数组分配。我觉得您的担心似乎超出了这个问题的范围。