动态内存分配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态内存分配相关的知识,希望对你有一定的参考价值。

Why?

可以保证程序在运行过程中按照实际需要申请适量的内存,使用结束后还可以释放,这种在程序运行过程中申请和释放的存储单元也称为堆对象申请和释放的过程一般称为建立和删除

new的功能:动态分配内存,或称为动态创建堆对象

new  数据类型(初始化参数列表)

    • 如果内存申请成功,new运算返回一个指向新分配内存首地址的类型的指针,可通过这个指针对堆对象访问;
    • 如果失败,会抛出异常。
  • 建立的对象是基本类型变量
技术分享图片
 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int *p1 = new int;  //分配内存后不设定初值
 6     int *p2 = new int();//表示用0对该对象初始化
 7 
 8     //动态分配用于存放int类型数据的内存空间,并将初值2存入内存空间,然后将首地址赋给指针p3
 9     int *p3 = new int(4);
10 
11     cout << *p1 << endl;
12     cout << *p2 << endl;
13     cout << *p3 << endl;
14     return 0;
15 }
View Code
  • 建立的对象是某一个类的实例对象

如果用户定义了默认构造函数:new Tnew T( )效果相同

如果没有:new T会调用系统生成的隐含的默认构造函数;New T( )除了执行默认构造函数会执行的操作之外,还会为基本数据类型和指针类型的成员用0赋值,而且这一过程是递归的。

delete:删除由new建立的对象,释放指针所指向的内存空间

  detele  指针名;

  如果同一内存空间多次使用delete进行删除,会导致运行错误。

使用new分配的内存,必须用delete释放,否则会导致动态分配的内存单元无法回收,使得程序占据的内存越来越大,这叫做内存泄漏

 

 

以上是关于动态内存分配的主要内容,如果未能解决你的问题,请参考以下文章

C - 读取文件并将文本放入具有动态内存分配的字符指针

简单动态内存分配实现(附代码)

golang 转到片段以观察运行时行为和内存分配

动态内存分配与静态内存分配

需要有关 C++ 中二维数组的动态内存分配的帮助

删除动态分配的内存