代码之家  ›  专栏  ›  技术社区  ›  Jayesh

如果在释放由新运算符分配的内存之前发生异常,会发生什么情况?

  •  0
  • Jayesh  · 技术社区  · 6 年前

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

    #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 回复  |  直到 6 年前
        1
  •  6
  •   StoryTeller - Unslander Monica    6 年前

    是否发生内存泄漏问题?

    . 这就是设计智能指针和整个RAII成语的全部原因。在找到处理程序时,仍会调用块范围变量的析构函数,以便这些析构函数可以释放已分配的资源。一个原始指针就会泄漏。

        2
  •  2
  •   Timmy_A    6 年前

    发生内存泄漏的原因是 delete 从来没有人打过电话。使用 std::unique_ptr<T> 而不是原始的C++指针。C++标准库提供 标准:独特的; 当包装指针超出范围时,它会自动取消分配。C++标准库也提供 std::shared_ptr<T> ,它使用引用计数并仅在释放对指针的最后一个引用时取消分配内存。