C++基础:new的三种形式详解

new的三种形式详解:

1.new operator         : new操作符  《=====》  ( operator new 开辟空间 ) + (调动构造函数 )

2.operator new : 操作符new   只开辟空间

3.placement new      :  定位new


例子:

<span style="font-size:18px;">#include <iostream>
using namaespace std;

void* operator new(size_t sz)   //operator new 只开辟空间
{
	void *p = malloc(sz);
	return p;
}
void operator delete(void *p)  //operator delete 只释放空间
{
	free(p);
}

void operator new[](size_t sz)
{	
	void *p = malloc(sz);
	return p;
}
void operator delete[](void *p)
{
	free(p);
}

class String
{
public:
	String(const char *str = "")
	{
		if(str == NULL)
		{
			data = new char[1];
			data[0] = '\0';
		}
		else
		{
			data = new char[strlen(str)+1];
			strcpy(data,str);
		}
	}
	~String()
	{
		delete []data;
		data = NULL;
	}
private:
	char *data;
};

void* operator new(size_t sz, int *d, int pos)
{
	return &d[pos];
}

int main()
{
	String *ps = new String("Hello");    //new operator
	delete ps;                         
     
	//上面的两行等于下面的四行组合

	String *ps = (String *)operator new(sizeof(String)); //operator new
	new(ps)String("Hello");       //placement new
	ps->~String();
	operator delete();


	//new(p)类型(初始值)   //placement new
	int ar[10];
	new(ar)int(10);     //ar[0] = 10;
	new(ar,3)int(10);   //ar[3] = 10;

	return 0;
}</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值