从零开始的C++(内存管理)

C++的内存管理

1、new/delete

  • new/delete是C++具备申请/释放堆内存功能的运算符,相当于C语言中的malloc和free。
  • new + 类型 会自动计算类型所需要的字节数,然后从堆中分配对应字节数的内存,并返回内存的首地址(具备类型)
  • delete + 指针 会自动释放堆内存
  • 注意:new/delete 与 malloc/free 不能混用,因为new和delete会自动调用类、结构的构造函数、析构函数

2、数组的分配与释放

  • new + 类型[n] n表示数组的长度,如果类、结构会自动调用n此构造函数
  • delete [] + 指针 通过new[]分配的内存,必须通过delete[]释放
  • new[] 返回值前4个字节中存放在数组的长度

3、重复释放

  • delete /delete[] 不能重复释放同一块内存
  • delete /delete[] 释放野指针的后果不确定,但可以释放空指针是安全的

4、内存分配失败

  • 当分配的内存过大,没有能满足需求的整块内存就会抛出异常 std::bad_alloc
  • new/delete 与C语言malloc相同点和不同点
    不同点
    1、身份 前者运算符 后者标准库函数
    2、参数 前者类型(自动计算) 后者字节数(手动计算)
    3、返回值 带类型的地址 void*地址
    4、调用构造 自动调用 不会调用构造/析构函数
    5、出错 抛异常 返回空 NULL
    相同点
    1、不能重复释放
    2、可以释放NULL
    3、都能管理堆内存
    注意:在C++中 尽量使用引用、new/delete

你可能感兴趣的:(从零开始的C++(内存管理))