C++ - 动态内存分配

有时候一个程序需要很大的内存,有时需要很小的空间,比较有效率的做法就是动态内存分配。


用 new 运算符实现动态内存分配

  • 第一种用法,分配一个变量:
    P = new T;
    T 是任意类型名,P 是类型为*** T * 的指针。
    动态分配出一片大小为 sizeof(T)字节的内存空间,并且将该内存空间的
    起始地址***赋值给 P。比如:
int * pn;
pn = new int;
*pn = 5;
  • 分配一个数组
    P = new T[N];
    T: 任意类型名
    P:可I型为 T* 的指针
    N:要分配的数组元素的个数,可以是整型表达式
    动态分配除一篇大小为 N*sizeof(T)字节的存储空间
int *pn;
int i = 5;
pn = new int[i*20];
pn[0] = 20;
pn[100] = 30;//编译没问题。运行时会导致数组越界
  • new 运算符返回值类型:
    new T;
    new T[n];
    这两个表达式返回值的类型都是 *** T * ***
    int *p = new int;

  • 用“new”动态分配的内存空间,一定要“delete”运算符进行释放
    delete 指针:该指针必须指向 new 出来的空间

int *p = new int ;
*p =5;
delete p;
delete p;//导致异常,一片空间不能被 delete 多次
  • 用“delete”释放动态分配的数组,要加“[]”
    delete[] 指针://该指针必须指向 new 出来的数组
int *p = new int[20];
p[0] = 1;
delete[] p;

如果分配的空间没有被回收就会成为程序的垃圾碎片。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. malloc()函数 1.1 malloc的全称是memory allocation,中文叫动态内存分配。 ...
    Pitfalls阅读 2,056评论 0 5
  • 我学C++数组的起初,想到能不能在“编译时数组元素是可以变化,运行时才确定元素个数”的这一问题。于是我开始看书,上...
    Lucky宁阅读 470评论 0 0
  • (JG-2014-08-20)(前半部分经过网上多篇文章对比整理)(后半部分根据ExceptionalCpp、C+...
    JasonGao阅读 5,628评论 2 23
  • C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是...
    一生信仰阅读 1,198评论 0 2
  • 《七步掌握业务分析》作者是BABOK创作委员会的核心成员,所以这本书基本上是以BABOK为基础的,感觉应该说是从实...
    卢礼瑾EWBOK阅读 2,751评论 0 5