//定位new placement new
//功能:在已分配好的原始内存中初始化一个对象
//所做的事情:
//(1)内存已经分配,定位new并不分配内存,需要提前将这个定位new要是用的内存分配出来
//(2)初始化一个对象(的内存),也可以说是调用这个对象的构造函数
//格式:
//new (地址) 类类型();
class A
{
A(){}
~A(){}
};
void* pvoid = (void*)new char[sizeof(A)]; // 先分配出内存
A* pa = new (pvoid) A(); // 调用无参构造函数,这里不会额外分配内存
// 相当于覆盖了原来的那块内存
//释放内存
delete pa; // 传统方式也行
pa->~A(); // 析构函数可以手动调用,构造函数不能手动调用
delete[](void*) pa; // 手动释放,更灵活
// 定位new 的重载
// 定位new没有对应的定位delete
void* operator new(size_t size, void* pvoid)
{
return pvoid; // 将收到的地址返回回去
}