美文网首页
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、Delete和malloc、free的区别? New和Delete自动调用 构造函数 和 ...

  • 2018-05-09

    new delete new delete与malloc free的区别 对于基本数据类型 malloc与free...

  • C++笔试整理

    1、new 、delete 、malloc 、free 的关系malloc 与 free 是 C++/C 语言的标...

  • 程序设计

    1 new/delete和malloc/free区别二者都是用于分配控件和释放空间的。new/free是c++中支...

  • 网络与通信

    1 new/delete和malloc/free区别二者都是用于分配控件和释放空间的。new/free是c++中支...

  • android

    1 new/delete和malloc/free区别二者都是用于分配控件和释放空间的。new/free是c++中支...

  • malloc/free和new/delete

    1. malloc/free与new/delete的区别 1、malloc/free是C语言的标准库函数;new/...

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

    C++中new/malloc/free/delete的区别 共同点 1 均是用于分配内存的工具, 且分配和释放均是...

  • malloc和new的区别

    C语言中的malloc/free和C++中的new/delete的区别和联系 相同点:它们都是对内存进行管理 区别...

  • malloc/free和new/delete

    区别与联系 1.malloc和free是C++/C提供的标准库函数,而new/delete则是C++运算符,注意:...

网友评论

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

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