1 使用

  • new/delete 与 malloc/free_mallocnew/delete 与 malloc/free_空指针_02
void* malloc(size_t size) //参数代表字节个数
void free(void* pointer) //参数代表内存地址
  • new/delete 与 malloc/free_空指针_03new/delete 与 malloc/free_C++_04 则为 new/delete 与 malloc/free_C++_05 的操作运算符,它调用的分别为赋值运算符重载 new/delete 与 malloc/free_指针_06new/delete 与 malloc/free_C++_07

2 内存分配位置


3 开辟空间大小

  • new/delete 与 malloc/free_malloc_10
  • new/delete 与 malloc/free_malloc_11

4 异常检测

  • new/delete 与 malloc/free_malloc_10开辟失败返回new/delete 与 malloc/free_malloc_13
  • new/delete 与 malloc/free_malloc_11不需要判断,当分配内存失败时,会抛处new/delete 与 malloc/free_指针_15

5 额外工作

  • new/delete 与 malloc/free_空指针_16
  • new/delete 与 malloc/free_空指针_17

  • new/delete 与 malloc/free_指针_18 实现机制:
  • new/delete 与 malloc/free_指针_19

  • new/delete 与 malloc/free_malloc_20实现机制:
  • new/delete 与 malloc/free_malloc_21

  • 如过程所示,new/delete 与 malloc/free_空指针_22
    new/delete 与 malloc/free_malloc_23

6 扩充 / 缩小

  • new/delete 与 malloc/free_malloc_10分配内存后,如果不够或者太多,可以使用new/delete 与 malloc/free_空指针_25
  • new/delete 与 malloc/free_malloc_11

7 内存分配失败

  • new/delete 与 malloc/free_malloc_11分配内存失败,用户可以指定处理函数,或重新制定分配器。【new/delete 与 malloc/free_C++_28
  • new/delete 与 malloc/free_malloc_10

8 释放判空检测

  • free 空指针会造成错误,必须判空。
  • 而delete遇到空指针,不会做任何事情,不需要额外判空。

  • 建议:无论是free还是delete,在释放之后,都习惯性的将指针置空,避免出现野指针或者悬垂指针。