• malloc/free vs new/delete


    malloc/new是库函数。

    new/delete是运算符。

    对于非内部数据类型的对象而言,光用malloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象在消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    class Obj
    {
    public :
        Obj(
    void){ cout << “Initialization” << endl; }
        ~Obj(
    void){ cout << “Destroy” << endl; }
        
    void Initialize(void){ cout << “Initialization” << endl; }
        
    void Destroy(void){ cout << “Destroy” << endl; }
    };

    void UseMallocFree(void)
    {
        Obj *a = (obj *)malloc(
    sizeof(obj)); // allocate memory
        a->Initialize(); // init
        //…
        a->Destroy(); // destroy
        free(a); // free memory
    }
    void UseNewDelete(void)
    {
        Obj *a = 
    new Obj; // allocate memory and construct object
        //…
        delete a; // destroy object and free memory
    }

    http://lklkdawei.blog.163.com/blog/static/32574109200881445518891/

    http://www.cnblogs.com/lazycoding/archive/2012/01/02/2310409.html

    个人学习笔记,欢迎拍砖!---by hellogiser

    Author: hellogiser
    Warning: 本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接。Thanks!
    Me: 如果觉得本文对你有帮助的话,那么【推荐】给大家吧,希望今后能够为大家带来更好的技术文章!敬请【关注】
  • 相关阅读:
    RedisTemplate的rightpushAll()时的坑
    Redis操作HyperLogLog
    Redis做消息队列使用
    UML
    设计模式概述
    HTTP/HTTPS/TCP/IP协议
    SpringBoot特点
    虚拟机+kafka基础配置
    Spring学习
    SpringBoot配置文件
  • 原文地址:https://www.cnblogs.com/hellogiser/p/malloc-free-vs-new-delete.html
Copyright © 2020-2023  润新知