内存管理【侯捷】——— 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的时候也是多次调用默认的构造函数。没法设初值,可以用

你可能感兴趣的:(C++学习,c++)