如何从函数返回动态分配的数组并正确删除它

Ant*_*996 2 c++ memory memory-leaks memory-management c++11

我是C++的新手,我的内存管理问题.

我有一个功能a()调用3个功能(b(),c(),d()),每个其中一个返回的动态分配的数组MyClass对象:

void a(){
    MyClass * one=b();
    MyClass * two=c();
    MyClass * three=d();
    //operate with 3 array (one, two and three)
    delete [] one;
    delete [] two;
    delete [] three;
}

MyClass * b(){
    MyClass * array=new MyClass[2000];
    //many operations on array
    return array;
}

MyClass * c(){
    MyClass * array=new MyClass[2000];
    //many operations on array
    return array;
}

MyClass * d(){
    MyClass * array=new MyClass[2000];
    //many operations on array
    return array;
}
Run Code Online (Sandbox Code Playgroud)

a()我的许多操作之后,我必须删除我用3个函数创建的3个数组.如果我使用delete []上面代码中的3个表达式来做,那可以吗?

我问自己这个问题,因为我认为这段代码正确地释放了所有内容,但是分析我的c ++程序的内存分配,我没有看到这种删除的证据.

r3m*_*n0x 5

为了可靠的内存管理,你应该使用智能指针,如std::unique_ptr.因此,当您的函数返回动态分配的值时,它应该返回std::unique_ptr该值以确保将释放此值.

std::unique_ptr<MyClass[]> array(new MyClass[2000]);
Run Code Online (Sandbox Code Playgroud)

但是在你的情况下你应该考虑使用std::vector而不是原始数组.