new 运算符

分配一个变量

  1. int * p;
  2. p = new int; // 返回sizeof(int)字节的int*
  3. *p = 5;

分配一个数组

P = new T[n]; 分配sizeof(T) * n个字节

  1. int * p;
  2. i = 5;
  3. p = new int[i*20]; // 返回sizeof(int)字节的int*
  4. p[5] = 5;
  • new T 和 new T[n] 返回值类型都是 T*

    使用delete释放动态分配内存

    1. int * p = new int;
    2. delete p;
    3. delete p; // 不能释放两遍

    释放数组

    delete [ ] 指针

    1. int * p = new int[20];
    2. delete []p;
  • 如果delete p; 则造成内存碎片,很多空间没有被释放