`
chriszeng87
  • 浏览: 738575 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C++中的new VS C语言中的malloc

阅读更多

  • 动作不同:
    • 在C++中,new一个对象时,程序完成对象的空间的分配的同时,构造函数也被调用,类似,delete一个对象时,对象的空间被释放的同时析构函数也被调用。
    • 在C中,malloc和free 则没有构造函数和析构函数被调用这个动作。当然,在没有特定的构造函数或析构函数时,C++也没有这个动作。
  • 关于重载:
    • 在C++中,对于任何非数组的空间分配,我们可以通过定义函数名相同但参数不同的构造函数完成对构造函数的重载,而对于数组的空间分配,就只能使用默认构造函数了,若你试图去开辟一个没有默认构造函数的数组,Compiler会出错。
    • 在C中,自然是没有重载这个事情了。
  • 返回值不同:
    • 在C中,malloc返回一个void *指针,需要你强制指针类型转换
    • 在C++中,你直接new一个就好。
      • 注意,对于基本类型,这个差别是二者唯一的差别,当然不建议在C++中使用malloc+强制类型转换创建基本数据类型或者对象。
  • 定义不同:
    • new是操作符
    • malloc是函数
  • 异常处理方式不同:
    • new抛出异常
    • malloc返回NULL
  • 分配空间单位不同:
    • new分配单位为对象所占用空间的倍数。
    • malloc为字节

使用提示:

1.delete使用不当会造成内存泄露,下边的这个例子就是只有第一个t被释放掉:

Test* t = new Test[3]; 
delete t;

而下列代码会导致堆崩溃或数据丢失。

Test* t = new Test; delete[] t; // <-- This is even worse

2.realloc只能用于malloc。C++中你只能重新开辟空间、复制、释放原来空间来完成相同的操作。

3.性能区别,根据http://code.dawnofthegeeks.com/2009/05/04/fyi-new-vs-malloc/ 其中提到malloc/free慢于new/delete,但是在后来笔者开发的一个程序中却出现了不同的场景。

 

转自:http://blog.csdn.net/gnuhpc/article/details/5720045

分享到:
评论

相关推荐

    C++中的new VS C语言中的malloc.docx

    【C++中的new与C语言中的malloc对比】 在C++和C语言中,内存管理是程序员必须关注的重要方面。C++引入了`new`运算符和`delete`运算符,而C语言则使用`malloc`函数和`free`函数进行动态内存分配和释放。两者的区别...

    Malloc和new区别

    **Malloc** 与 **Free** 是 C/C++ 语言中的标准库函数,主要用于动态内存的分配与释放。这两个函数定义在 `&lt;cstdlib&gt;`(或 `&lt;malloc.h&gt;`)库中。 **New** 与 **Delete** 是 C++ 语言中的关键字,作为运算符使用,...

    C++中new和malloc的区别

    在C++中,动态内存分配主要通过new和delete运算符实现,而C语言中主要使用malloc和free函数。尽管这两组工具看似执行相似的功能,但它们之间存在着本质的差异。 相同点 new和malloc都可以用来在堆上分配内存,且都...

    计算机二级c++之C++与C语言的区别.pdf

    C++中new和delete是对内存分配的运算符,取代了C中的malloc和free。标准C++中的字符串类取代了C标准C函数库头文件中的字符数组处理函数。C++中的try/catch/throw异常处理机制取代了标准C中的setjmp()和longjmp()函数...

    (麻省理工免费课程)C语言内存管理和C++面向对象编程

    本课程重点讲解了两种重要的内存管理技术:动态分配(`malloc`)和C++中的`new`操作符。这些技术允许程序员根据需要在程序运行时分配或释放内存,这对于实现复杂的数据结构和算法至关重要。 1. **`malloc`函数**:`...

    malloc 与new的区别

    而C++则通过关键字new和delete来实现这一功能,它们与C语言中的malloc和free既有相似之处也有明显的区别。本文将对malloc和new的区别进行详细解读,包括它们的属性、参数、返回类型、自定义类型处理、内存区域、分配...

    计算机二级c++之C++与C语言的区别整理.pdf

    * C++ 中的 new 和 delete 是对内存分配的运算符,取代了 C 中的 malloc 和 free。 * C++ 中的字符串类取代了 C 标准 C 函数库头文件中的字符数组处理函数。 * C++ 中的 iostream 类库替代了标准 C 中的 stdio 函数...

    malloc和new的区别

    malloc/free通常用于C语言和C++语言混合编程环境中,而new/delete则更适合纯C++语言开发环境。同时,new/delete也可以用于实现智能指针,自动管理动态内存,提高开发效率和可读性。 malloc和new都是动态内存分配...

    new与malloc 的区别和用法

    在C++编程中,`new`和`malloc`都是...4. `new`更适合C++环境,与C++特性兼容,`malloc`适用于C语言环境或与C库的交互。 了解这些区别后,开发者可以根据具体需求选择合适的内存分配方法,以实现更高效、安全的代码。

    高质量程序设计指南--C++/C语言.pdf

    书中提供了关于内存分配、指针与数组的对比、动态内存管理(如`malloc/free`、`new/delete`)等方面的最佳实践。 - **函数设计**:函数设计的好坏直接影响到程序的可维护性和扩展性。书中给出了关于参数规则、返回值...

    C++和C语言的区别

    接着,C++引入了`new`和`delete`运算符来管理内存,这是对C语言中`malloc()`和`free()`的扩展。`new`用于动态分配内存,而`delete`用于释放内存。特别地,对于数组,`delete[]`用于删除由`new[]`分配的内存。C++中的...

    c/c++ mallocfree newdelete 区别

    在C/C++编程中,内存管理是至关重要的一个环节,其中`malloc`和`free`是C语言标准库提供的函数,而`new`和`delete`是C++中的运算符,它们都用于动态内存的分配和释放。虽然两者在功能上有相似之处,但在使用和功能上...

Global site tag (gtag.js) - Google Analytics