new和delete运算符

作者:jicanmeng

时间:2014年11月27日


在C语言中,动态分配内存使用malloc()函数,释放动态分配的内存用free()函数。在C++中,malloc/free被替换成了new/delete。

示例程序如下:

#include <iostream>

int main()
{
    // dynamically allocate an integer
    int *pnValue = new int;
    *pnValue = 7;
    // unallocate memory assigned to pnValue
    delete pnValue;
    pnValue = 0;

    int nSize = 12;
    int *pnArray = new int[nSize]; // note: nSize does not need to be constant!
    pnArray[4] = 7;
    delete[] pnArray;

    return 0;
}

new和delete有两个版本:new/delete和new[]/delete[]。前者用于分配和释放一个变量的内存,后者用于分配和释放一个数组的内存。在程序中,我们虽然在分配数组内存的时候使用了new int[nSize],但其实编译器调用的是new[]。

参考资料

  1. <<C++实用教程>> 电子工业出版社 郑阿奇 主编 丁有和 编著 P240
  2. The C++ Tutorial:
    http://www.learncpp.com/cpp-tutorial/69-dynamic-memory-allocation-with-new-and-delete/
  3. 编写高质量代码:改善C++程序的150个建议:
    http://book.51cto.com/art/201202/317620.htm