C++中new和delete的使用方法

用户存储区空间分为三部分: 程序区(代码区)静态存储区(数据区)动态存储区(栈区和堆区)。代码区存放程序代码,程序运行前就可分配存储空间。数据区存放常量、静态变量、全局奕量等。栈区存放局部变量、函数参数、函数返回值和临时变量等。堆区是程序空间中存在的一些空闲存储单元,这些空闲存储单元组成堆。在堆中创建的数据对象称为堆对象。当创建对象时,堆中的一些存储单元从未分配状态变为已分配状态;当删除所创建的堆对象时,这些存储单元从已分配状态又变为未分配状态。当堆对象不再使用时,应予以删除,回收其所占用的动态内存。

在 C++中使用运算符 new 和 delete 来实现在堆内存区中进行数据的动态分配和释放。

对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。对于不能确定需要占用多少内存的情况,动态内存分配解决了这个问题。

new

new用来申请动态变量或动态数组:

指针变量 = new T;
指针变量 = new T(初值列表);
指针变量 = new T[元素个数];

new创建对象的特点:

new返回一个指定的合法数据类型内存空间的首地址,若分配不成功,返回一个空指针。
new创建堆对象的格式:类名 *指针名 = new 类名([构造函数参数]);
new不能对动态分配的数组存储区进行初始化。
new分配的空间,试用结束只能用delete显式释放,否则这部分内存空间得不到释放,造成内存泄露。
new对象指针用途广泛,比如作为函数返回值、函数参数等。

delete

delete用来释放动态变量或动态数组所占的空间,格式为;

delete 指针变量名
delete []指针变量名

delete特点:

释放动态变量所占的内存空间
释放动态数组所占的内存空间;delete []p;

注意事项:

1. new 和 delete 需要配套使用,如果搭配错了,程序运行时就会发生不可预知的错误。
2. 在用 delete 释放指针所指的空间时,必须保证该指针所指的空间是用 new 申请的,并且只能释放一次,否则将产生 指针悬挂问题。
3. 如果在程序中用 new 申请了空间,就应该在结束程序前释放所有申请的空间,这样才能保证堆内存的有效利用。
4. 当delete 用于释放由 new 创建的数组连续内存空间时,无论是一维数组还是多维数组指针变量名前必须使用[],且[]内没有数字。

你可能感兴趣的:(C++学习,c++,开发语言)