概述
/*
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;
}
最后
以上就是虚幻路人为你收集整理的new和delete、malloc和free之间的异同点以及用法实例的全部内容,希望文章能够帮你解决new和delete、malloc和free之间的异同点以及用法实例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复