详解
- c语言中使用malloc/calloc/realloc/free进行动态内存分配,malloc/calloc/realloc用来在堆上分配空间,free将申请的空间释放掉。
这里要注意的一点是,为什么分配了空间之后,必须要用户手动去free掉呢,是因为malloc、calloc、realloc都是在堆上分配的,堆上分配的空间必须由用户自己来管理,如果不释放,就会造成内存泄漏。而栈上分配的空间是由编译器来管理的,具有函数作用域,出了函数作用域后系统会自动回收,不由用户管理,所以不用用户显式释放空间。
c++中是通过new和delete操作符进行动态内存管理的。
对指向不使用 new 分配的指针使用 delete 将产生不可预知的结果。 但是,可以对值为 0 的指针使用 delete。 此设置意味着,当 new 失败并返回 0 时,删除已失败 new 操作的结果不会造成损害
- delete 运算符的结果类型为 void,因此它不返回值
- new和delete既是C++中的关键字也是一种特殊的运算符
void* operator new(size_t size);
void* operator