new和delete、malloc和free之间的异同点以及用法实例

来源:互联网 发布:考研数学文都网络课程 编辑:程序博客网 时间:2024/06/09 22:27
/*malloc和free    new和delete  两大类之间的<strong><span style="font-size:18px;">根本区别</span></strong>1.malloc和free是属于c语言范畴的,而new和delete是属于c++范畴的。2.malloc不能给对象进行初始化,而new可以给对象进行初始化。3.new和delete会自动调用类的构造函数和析构函数,而malloc和free不会调用。4.malloc和delete、new和free 可以混搭,但不建议这样用,因为会造成代码不方便管理,并且会造成对象无法调用析构函数而出错,比如使用new 和 free,如果类里开辟了一段新空间,如果无法调用析构函数,那么这段空间就会浪费点。*/#include "stdafx.h"#include <iostream>using namespace std;class Test{public:Test(int _a){a = _a;cout << "构造函数被执行" << endl;}~Test(){cout << "析构函数被执行" << endl;}private:int a;};int main(){//malloc 和 free 以及new 和 delete 用法说明//1.基础数据类型的动态建立和释放int *p = (int *)malloc(sizeof(int));*p = 1;free(p);int *p = new int;*p = 2;delete p;//2.数组的动态建立和释放int *p = (int *)malloc(10*sizeof(int));// 相当于int p[10]p[0] = 10;cout << p[0] << endl;free(p);int *p2 = new int[10];p2[0] = 11;delete[]p2;//2.类的对象的动态建立和释放Test *t1 = (Test *)malloc(sizeof(Test));free(t1);Test *t2 = new Test(12);//初始化delete t2;//结论:可发现 new 和 delete 会调用构造函数和析构函数 而malloc 和 free 不会调用!return 0;}

0 0