定位new 及其重载

Posted zhiminzeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定位new 及其重载相关的知识,希望对你有一定的参考价值。

 

//定位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;  // 将收到的地址返回回去
}

 

以上是关于定位new 及其重载的主要内容,如果未能解决你的问题,请参考以下文章

C++内存管理基础篇

导航架构片段重载问题

导航架构片段重载问题

MinGW 中的全局重载运算符 new/delete

C++ ---内存管理

CSS代码片段