C++内存分配之new与delete

您所在的位置:网站首页 new和delete和malloc C++内存分配之new与delete

C++内存分配之new与delete

2023-12-11 21:29| 来源: 网络整理| 查看: 265

文章目录 内存分配分配途径array newoperator newplacement new new handlerallocatorpool_allocatorbitmap_allocator malloc内存布局page结构debug头VC程序调用栈

C++中在堆内存中创建和销毁对象需要借助关键字new和delete来完成,new和delete既是C++中的关键字也是一种特殊的运算符。

内存分配

C++中有多种内存分配、释放方式:

分配释放类属可否重载malloc()free()C函数不可newdeleteC++表达式不可::operator new()::operator delete()C++函数可allocator::allocate()allocator::deallocate()C++标准库可自由设计并与容器搭配

C++内存分配调用层次

GUN下示例:

void* p1=malloc(512); free(p1); Complex* p2=new Complex; // one object delete p2; void *p3=::operator new(512); // 512 byte ::operator delete(p3); // gun2.9,为静态函数 // void* p4=alloc::allocate(512); // alloc::deallocate(p4,512); // gun4.9;分配9个int void* p4=allocactor().allocate(9); allocactor().deallocate((int*)p4,9); // 相当于2.9的alloc::allocate;但是都要通过对象调用 void* p5=__gnu_cxx::__pool_alloc().allocate(9); __gnu_cxx::__pool_alloc().deallocate((int*)p5, 9); 分配途径

C++分配一个对象(new)时,会有一个固定的调用途径,其中有些函数是可以重载的,从而修改内存分配与释放方式: C++内存分配途径

new可以有多个重载版本:

只有size_t一个参数的,为标准class operator new:重载后,默认new对象时会最终调用此函数来分配内存;两个参数(size_t + void*)的,为标准placement new:重载后,可在已有内存上构建对象; class Bar{ public: Bar(){ cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3