内存管理【侯捷】——— const和new

内存管理【侯捷】——— const和new

相关资料:
书籍:
《Small Memory Software》
《Modern C++ Design》

C++ Applications
| | | C++ Library
| | C++ primitives(new,new[], operator new)
| CRT(malloc/free)
OS API (HeapAlloc, VitualAlloc)

operator的使用:
void* p3 = ::operator new(512);
::operator delete(p3);
容器分配器使用:
#ifdef __MSC_VER
int* p4=allocator().allocate(3,(int*)0);
allocator().deallocate(p4,3);
#endif
#ifdef BORLANDC
int* p4=allocator().allocate(5);
allocator().deallocate(p4,5);
#endif
#ifdef GNUC
void* p4=alloc::allocate(512);
alloc::deallocate(p4,512);
#endif
这些都是比较早的版本,后面的版本同BORLANDC

new的实现步骤:1、调用operator new分配空间,往深里面调用了malloc;2、进行类型转换,将malloc出来的指针转成类的类型;3、调用构造类的函数
delete实现的步骤:1、调用析构函数;2、释放内存
new和delete的中括号要对应,如果new的时候有中括号,delete时没有,就会发生内存泄漏,delete会认为它只有一个,只free一次,中括号会进行delete重复几次。
Complex* pca=new Complex[3];
delete[] pca;
array new的时候分配的空间前面会有一个cookie,用来记录数组的长度。array new的时候也是多次调用默认的构造函数。没法设初值,可以用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值