码迷,mamicode.com
首页 > 其他好文 > 详细

定位new 及其重载

时间:2020-07-02 23:20:15      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:nbsp   内存分配   return   格式   style   delete   对象   初始   覆盖   

 

//定位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 及其重载

标签:nbsp   内存分配   return   格式   style   delete   对象   初始   覆盖   

原文地址:https://www.cnblogs.com/zhiminzeng/p/13227754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!