当动态数组超出范围时释放内存

Aly*_*Aly 1 c++ scope dynamic-arrays dynamic-allocation

我正在为函数中的数组动态分配内存.我的问题是:一旦函数完成运行就释放了内存?

码:

void f(){
    cv::Mat* arr = new cv::Mat[1];
    ...
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ine 6

不,new当指针超出范围时,不会自动释放使用的内存.

但是,您可以(并且应该)使用C++ 11 unique_ptr,它在超出范围时处理释放内存:

void f(){
    std::unique_ptr<cv::Mat[]> arr(new cv::Mat[1]);
    ...
}
Run Code Online (Sandbox Code Playgroud)

C++ 11还提供shared_ptr了您可能想要复制的指针.现代C++应该努力用这些"智能指针",为他们提供更安全的内存管理,几乎没有性能损失.

  • @Aly,当你调用`g ++`时,试试`g ++ -std = c ++ 11`或`g ++ -std = c ++ 0x`.其中一个应该启用`unique_ptr`. (2认同)