美文网首页
C++中new/malloc/free/delete的区别

C++中new/malloc/free/delete的区别

作者: 突击手平头哥 | 来源:发表于2020-01-01 19:56 被阅读0次

    C++中new/malloc/free/delete的区别

    共同点

    • 1 均是用于分配内存的工具, 且分配和释放均是一一对应的否则就会出现内存泄漏
    • 2 都是从堆中分配内存

    区别

    • 1 使用方式的区别: 前两个是运算符后两个是函数; new会根据类型自动推断大小, malloc必须指定大小.
    int main()
    {
        int *a = new int;
        int *b = (int*)malloc(sizeof(int));
        delete a;
        free(b);
    }
    
    • 2 返回值不同, malloc为了通用返回的是void*类型指针, 而new返回指定的类型指针.

    • 3 失败告警不同, malloc失败返回NULL, 但是new仅抛出bad_alloc异常

    #include <iostream>     // std::cout
    #include <new>          // std::bad_alloc
     
    int main()
    {
        char *p;
        try
        {
            do
            {
                p = new char[2047 * 1024 * 1024];         //每次1M
            } while (p);
        }
        catch(std::exception &e)
        {
            std::cout << e.what() << endl;
        };
     
        return 0;
    }
    
    //结果
    std::bad_alloc
    
    
    • 4 new/delete是C++独有的, 而malloc/free兼容C

    new返回NULL指针

    #include <iostream>     // std::cout
    #include <new>          // std::bad_alloc
     
    int main()
    {
        char *p = new (std::nothrow) char[2047 * 1024 * 1024];         //每次1M
        if(!p)
        {
            std::cout<<"alloc error"<<std::endl;
        }
     
        return 0;
    }
    

    使用std::nothrow

    相关文章

      网友评论

          本文标题:C++中new/malloc/free/delete的区别

          本文链接:https://www.haomeiwen.com/subject/clygoctx.html