new关键字创建出来的对象位于什么地方?
很明显嘛,new关键字创建出来的对象一定位于堆空间,这种说法一定正确吗?本篇博客帮你揭开其神秘的面纱。
被忽略的事实
new/delete的本质是C++预定义的操作符
C++对这两个操作符做了严格的行为定义
-new:
1.获取足够大的内存空间(默认为堆空间)
2.在获取的空间中调用构造函数创建对象
-delete:
1.调用析构函数销毁对象
2.归还对象所占用的空间(默认为堆空间)
在C++中能够重载new/delete操作符
全局重载(不推荐)
局部重载(针对具体类进行重载)
重载new/delete的意义在于改变动态对象创建时的内存分配方式
new/delete的重载方式
//static member function,写不写static都是静态成员函数。
void* operator new(unsigned int size)
{
void* ret = NULL;
/*ret pointer to allocated memory*/'
return ret;
}
//static member function
void operator delete(void* p)
{
/*free the memory which is pointed by p*/
}