定位new
1.对已创建的空间进行操作
2.使用:
①申请空间
②new(参数) 类型(参数值);
/*自定义类型*/
class Test
{
public:
Test(int data=0)
{
cout<<"Create Test."<<endl;
m_data = data;
}
Test(const Test &t)
{
m_data = t.m_data;
}
~Test()
{
cout<<"Free Test."<<endl;
}
private:
int m_data;
};
void* operator new(size_t sz, Test *ar, int pos)
{
//返回定位地址,后面的创建对象、初始化、
//赋值由操作系统完成
return &ar[pos];
}
void main()
{
//Test *pt = (Test*)malloc(sizeof(Test));
Test pt[10]; //先申请空间
new(pt, 1)Test(10);
}
/*内置类型的*/
void* operator new(size_t sz, int *ar, int pos)
{
return &ar[pos];
}
void main()
{
int ar[10];
//定位new
new(ar)int(1);
new(ar, 8)int(1000);
int *ptr = (int*)malloc(sizeof(int) * 10);
assert(ptr != NULL);
//
new(ptr)int(1);
free(ptr);
}