new malloc

      C++ 2008-10-14 18:2

1、mallocfreeC++/C语言的标准库函数,不在编译器控制范围之内;new/deleteC++的运算符,在编译器控制范围之内。 2、new 不止是分配内存,能自动计算要分配对象的大小,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,指定内存大小,不会进行初始化类成员的工作,同样free也不会调用析构函数 3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。 4、malloc() 通过返回 0 来表示内存耗尽;而 new 通过抛出异常来报告内存分配和初始化错误。5,调用malloc时,从堆中申请内存;调用new时,从堆中申请内存并为内存调用构造函数。 new可以认为是malloc加构造函数的执行。6,new出来的指针是直接带类型信息的;而malloc返回的都是void指针。 

对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free

       因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}