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++主要用于动态对象的分配与删除,自动调用构造函数与析构函数。

     

  • 相关阅读:
    Solved:Spring Junit Test NoSuchMethodError
    Stack实现
    CLRS10.2-8练习
    CLRS10.2-7练习
    CLRS10.2-4练习
    CLRS10.1-7练习
    CLRS10.1-6练习
    算法:吸血鬼数字算法
    CLRS最大子数组问题
    VS快捷键
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3459425.html
Copyright © 2011-2022 走看看