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

/*
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值