如果在释放新操作员分配的内存之前发生异常会怎样?

时间:2019-01-24 06:09:05

标签: c++ new-operator free dynamic-memory-allocation

我只是想知道,如果在释放新操作员分配的内存之前发生异常,将会发生什么?是否发生了内存泄漏问题?

#include <iostream>
#include<new>

using namespace std;

void func()
{
    try
    {
        int *p = new int[10];

        /*
            Number of lines code here
            .
            .
            .
            .
            .
            Suppose here I got exception then What heppens????
            .
            .
            .
            .
        */
        delete []p;
    }
    catch(const std::exception& e)
    {
        cout<<"Exception occured"<<endl;
    }
}

int main() {
    func();
    return 0;
}

2 个答案:

答案 0 :(得分:6)

  

是否发生了内存泄漏问题?

。这就是设计智能指针和整个RAII习惯的全部原因。当找到处理程序时,仍会调用块范围变量的析构函数,因此它们可以释放分配的资源。原始指针只会泄漏。

答案 1 :(得分:2)

发生内存泄漏,因为从未调用过运算符delete。使用std::unique_ptr<T>代替原始的C ++指针。 C ++标准库提供std::unique_ptr<T>,当它超出范围时,它会自动取消分配包装的指针。 C ++标准库还提供std::shared_ptr<T>,它使用引用计数并仅在释放对指针的最后一个引用时才取消分配内存。