C++中的new与delete

目录

1.简介

2.底层


1.简介

new是升级版的malloc,它会先开空间再去调用构造函数。

delete是升级版的free,它会先调用析构函数再free掉空间。

class A
{
public:
	A(int a1=0, int b1=0)
	{
		a = a1;
		b = b1;
	}

private:
	int a;
	int b;
};


int main()
{
	//new会先开空间再调用构造函数
	A* p1 = new A;
	A* p2 = new A(1, 1);
	
	//new多个对象并调用构造函数初始化
	A* p3 = new A[3];
	//隐式类型转换:先构造出临时对象再调用拷贝构造
	A* p4 = new A[3]{ {1,2},{2,3},{3,5} };
	//运用匿名对象初始化,先是构造匿名对象,再拷贝构造(编译器会优化成一次构造)
	A* p5 = new A[3]{ A(1,1),A(2,2),A(3,3) };


	//delete会先调用析构函数,再free掉空间
	delete p1;
	delete p2;
	delete [] p3;
	delete [] p4;
	delete [] p5;


	return 0;
}

2.底层

//模拟底层

//先是开空间,这里和malloc没区别
A* p6 = (A*)operator new(sizeof(A));
//显式调用构造函数
new(p6)A(1, 2);

//显式调用析构函数
p6->~A();
//释放空间
operator delete (p6);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值