Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用数组初始化时的STL向量内存管理?_C++_Arrays_Memory_Vector - Fatal编程技术网

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(相当流行的开源库的一部分)将图像加载为动态分配的数组。然后,用向量将其包装。因此,我选择在示例函数中演示一个简单的动态数组分配。我觉得您的担心似乎超出了这个问题的范围。