zoukankan      html  css  js  c++  java
  • malloc/free与new/delete的不同及注意点

    #include<iostream>
    using namespace std;
    
    class Obj{
    public :
        Obj(){cout<<"Initialization"<<endl;}
        ~Obj(){cout<<"Destroy"<<endl;}
        void Init(){cout<<"Initialization2"<<endl;}
        void Destroy(){cout<<"Destroy2"<<endl;}
    };
    
    void malloc_test(){//malloc/free 不会执行构造函数与析构函数
        Obj *a=(Obj*)malloc(sizeof(Obj));
        a->Init();
        //~~~~~
        a->Destroy();
        free(a);
    }
    
    void new_test(){
        Obj * a=new Obj; 
        delete a;
    }
    
    int main(){
        malloc_test();
        new_test();
    }

    除了前者是函数,后者是标识符的区别外

    前者是在C语言中诞生的,用于内存分配但是不会执行构造函数与析构函数。(这里没有继承,要是有继承关系,用free就难以处理从派生类到基类的析构了,内存泄露在所难免)

    后者是C++主要用于动态对象的分配与删除,自动调用构造函数与析构函数。

     

  • 相关阅读:
    FreeSql 教程引导
    Day3-JS-JavaScript 函数专题
    Day2-JS-JSON
    Day2-JS-let和const
    Day2-JS-this 关键字
    Day2-JS-JavaScript 验证 API
    Day2-JS-表单
    Day2-JS-严格模式
    Day2-JS-JavaScript 错误
    Day2-JS-正则表达式
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3459425.html
Copyright © 2011-2022 走看看