动态内存分配
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 }
- 建立的对象是某一个类的实例对象
如果用户定义了默认构造函数:new T和new T( )效果相同
如果没有:new T会调用系统生成的隐含的默认构造函数;New T( )除了执行默认构造函数会执行的操作之外,还会为基本数据类型和指针类型的成员用0赋值,而且这一过程是递归的。
delete:删除由new建立的对象,释放指针所指向的内存空间
detele 指针名;
如果同一内存空间多次使用delete进行删除,会导致运行错误。
使用new分配的内存,必须用delete释放,否则会导致动态分配的内存单元无法回收,使得程序占据的内存越来越大,这叫做内存泄漏。
以上是关于动态内存分配的主要内容,如果未能解决你的问题,请参考以下文章