zoukankan      html  css  js  c++  java
  • C++中free()与delete的区别

    1、new/delete是C++的操作符,而malloc/free是C中的函数。

    2、new做两件事,一是分配内存,二是调用类的构造函数;同样,delete会调用类的析构函数和释放内存。而malloc和free只是分配和释放内存。

    3、new建立的是一个对象,而malloc分配的是一块内存;new建立的对象可以用成员函数访问,不要直接访问它的地址空间;malloc分配的是一块内存区域,用指针访问,可以在里面移动指针;new出来的指针是带有类型信息的,而malloc返回的是void指针。

    4、new/delete是保留字,不需要头文件支持;malloc/free需要头文件库函数支持。

    我们看一看malloc/free和new/delete如何实现对象的动态内存管理,见示例。

     1 class Obj
     2 {
     3 public:
     4     Obj() { cout << "Initialization" << endl; }
     5     ~Obj() { cout << "Destroy" << endl; }
     6     void Initialize() { cout << "Initialization" << endl; }
     7     void Destroy() { cout << "Destroy" << endl; }
     8 };
     9  
    10 void UseMallocFree()
    11 {
    12     Obj *a = (Obj*)malloc(sizeof(obj));
    13     a->Intialize();
    14     // ...
    15     a->Destroy();
    16     free(a);
    17 }
    18  
    19 void UseNewDelete()
    20 {
    21     Obj *a = new Obj;
    22     //...
    23     delete a;
    24 }

    类Obj的函数Initialize模拟了构造函数的功能,函数Destroy模拟了析构函数的功能。函数UseMallocFree中,由于malloc/free不能执行构造函数与析构函数,必须调用成员函数Initialize和Destroy来完成初始化与清除工作。函数UseNewDelete则简单得多。

    这只是个例子,不会有人用malloc/free来创建类对象。另外,new和delete配套使用,new[]和delete[]配套使用。

  • 相关阅读:
    openmediavault 5.5.23 安装插件失败的解决方案
    qt下载地址
    qt 5.12 增加 mysql驱动
    选基金标准
    关注几个基金
    调仓的几个问题
    要读的书
    ubuntu 20.04 LTS 安装webmin
    set的常见用法
    斜率优化dp([HNOI2008]玩具装箱)
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/12365773.html
Copyright © 2011-2022 走看看