new/deletemalloc/free的区别


  • 扩容操作:

对于malloc是有一个realloc函数对应用于扩容的;

对于new,只能再new一个,for循环赋值过去,把原来的delete掉;

  • 对于 对象:

malloc只进行空间的申请,不调用构造函数初始化对象。free也不会调用析构函数。

这段代码什么也不会输出。

#include <iostream>
using namespace std; class A {
public:
int x;
A() {
x = ;
cout << "constructor." << endl;
}
~A() {
cout << "destructor." << endl;
}
};
int main() {
A *a = (A *)malloc(sizeof(A));
free(a);
return ;
}

使用new操作符的三个步骤:

  1. 调用operator new() 函数 分配用于存储 相应对象  指定大小的 内存空间。
  2. 调用 构造函数
  3. 返回指向该对象的指针(malloc返回的是void *指针)。

使用delete操作符的两个步骤:

  1. 调用 析构函数
  2. 调用operator delete() 函数释放内存空间。

    PS:上次用C++写单链表,还因为 1 出了错,X_X。

        ~LNode() {
    LNode *p = this->next;
    while (p) {
    LNode *t = p->next;
    delete p;
    p = t;
    }
    }
  • new/delete可以进行重载

C++对new/delete函数进行了很多类型的重载,通常底层是用malloc/free来实现的。


其他还有一些我们已经当成习惯的区别:

  • 在处理数组时,free(array); delete[] array;
  • 内存分配失败,new会抛出异常,malloc会返回NULL,所以一般用malloc后面都会加 if ( ..... == NULL )
  • 一个是C语言的库函数,需要#include<malloc.h>;一个是关键字。
  • 对于C语言程序(*.c文件),只能使用malloc/free。
  • 使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。

此外还有一些

    node* n1 = (node*)malloc(sizeof(node));//只会分配内存空间
//对于下面两个,如果没重写了默认构造函数,则它们是没有区别的
//如果没有自己重写默认构造函数(当然也没有写构造函数),则new node只是分配内存空间,new node()会调用默认构造函数
node* n2 = new node;
node* n3 = new node();

C/C++——new/delete和malloc/free的区别的更多相关文章

  1. new/delete 和malloc/free 的区别

    new/delete 和malloc/free 的区别 一.基本概念malloc/free:1.函数原型及说明:      void *malloc(long NumBytes):该函数分配了NumB ...

  2. new/delete与malloc/free的区别

    new/delete与malloc/free的区别 参考: https://blog.csdn.net/u013485792/article/details/51329541 https://www. ...

  3. new/delete和malloc/free的区别

    通俗易懂版本:http://zhidao.baidu.com/question/86185100 1 new/delete和malloc/free最大区别是对对象的理解. 如果你使用 Foo* foo ...

  4. new/delete 与 malloc/free的区别

    一.概述     在C++中,申请动态内存与释放动态内存用new/delete 与 malloc/free都可以,而且他们的存储方式相同,new/malloc申请的动态内存位于堆中,无法被操作系统自动 ...

  5. C++中,new/delete和malloc/free的区别

    1.new/delete是C++的操作符,而malloc/free是C中的函数. 2.new做两件事,一是分配内存,二是调用类的构造函数:同样,delete会调用类的析构函数和释放内存.而malloc ...

  6. [C/C++] new/delete和malloc/free基本区别

    /**便于遗忘时复习**/ 区别一:本质 new/delete 在C++中是运算符不是函数,需要编译器支持.malloc/free是库函数,需要头文件支持,在C语言中使用. 区别二:开辟内存大小 用 ...

  7. new/delete、malloc/free 的区别

    相同点 1.都可以动态的申请或释放内存 2.存储方式相同,动态申请的内存都存放在堆中,无法自动释放,要调用对应的delete和free   区别 1.new能自行的计算需要分配的空间,malloc需要 ...

  8. c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系

    1.      引用本身是有指针实现的:引用为只读指针 例子: int d=123; int& e=d;    //引用 int * const e=d; //只读指针,e指向d,不可修改e指 ...

  9. new、delete与malloc、free的详解

    内容清单: 1.  C语言中的函数malloc和free 2.  C++中的运算符new和delete 3.  new/delete与malloc/free之间的联系和区别 4.  C/C++程序的内 ...

随机推荐

  1. spring底层原理解析

    注解测试:如何使用注解(去掉配置文件)开发 新建MainConfig类 注解测试:新建MainTest2注解测试,用来测试//AnnoatationConfigApplicationContext: ...

  2. HDU 1757 矩阵求第n的递推式

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  3. Sprng IOC&AOP&事务梳理 (文章整理new)

    IOC <理解 IOC> <IOC 的理解与解释> 正向控制:传统通过new的方式.反向控制,通过容器注入对象. 作用:用于模块解耦. DI:Dependency Inject ...

  4. HEOI2017 游记

    你若安好,便是晴天. …… 人就像命运下的蝼蚁,谁也无法操控自己的人生. ——阮行止 …… Day 0 中午就要出发了,上午教练还搞了一场欢乐信心赛,然而还是挂惨了.T3是bzoj的原题,但是当时写的 ...

  5. COGS2217 papertask

    传送门 以前看到这题的时候觉得是道好题啊……然而今天没多久就做出来了= =(装B 表示并没有看懂其他人写的是什么做法,感觉我的做法好奇怪…… 我的做法是这样的: 首先给括号配对,不难发现所有括号串要么 ...

  6. CSS Align bottom

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  7. PHP在foreach中对$value赋值无效,应该用 ‘键’ 或者 &$value的形式

    首先我们看下这段代码: foreach ($data as$value) { $value['name'] = 'Hehe'; } $data中原始的数据为: array(1) { [0] => ...

  8. 微信小程序-view组件

    <view class="section"> <view class="section__title">flex-direction: ...

  9. 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

    问题描述: 有时候使用 apt-get 终端提示这样的错误信息: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/ ...

  10. python 静态 封装 继承 mro 接口 super

    1.静态属性 静态方法  类方法 #!/usr/bin/python env # encoding: utf-8 # 静态属性 静态方法 class Room: tag = 168 def __ini ...