运算符new和delete
C++使用运算符new和delete动态进行内存分配和释放
1、运算符new和delete的基本形式
(1)new的基本形式
运算符new从称为堆的一块自由内存存储区中为程序分配一块与类型字节数相适应的内存空间,并将该块内存的首地址存于指针变量中
【示例】
指针变量名=new 类型;
int *p; //定义一个整型指针变量p
p=new int; //new动态分配存放一个整数的内存空间,并将首地址赋给指针变量p
(2)detete的基本形式
运算符detele用于释放运算符new分配的存储空间
【示例】
delete 指针变量;
delete p; //将new动态分配内存空间释放
(3)使用new和delete的示例
#include<iostream>
using namespace std;
int main()
{
int *ptr;
ptr=new int;
*ptr=10;
cout<<"* ptr = "<<*ptr;
delete ptr;
return 0;
}
【运行结果】
2、运算符new和delete的优点
(1)使用malloc函数时必须使用sizeof函数计算所需的字节数,而new可以根据数据类型自动计算说要分配内存大小
(2)new自动返回正确的指针类型,而不必像malloc函数,必须在程序中进行强制类型转换
3、运算符new为数组动态分配内存空间
(1)一维数组
【示例】
int *p=new int [10]
(2)多维数组
int *p=new [2][3][4]
其中第1维的界值可以是任何合法的正整数表达式
int i=2;
int *p=new int [i][3][4];
(3)new为简单变量分配内存的同时,进行初始化
指针变量名 =new 类型(初值);
【示例】
#include<iostream>
using namespace std;
int main()
{
int *ptr;
ptr=new int(10);
cout<<"* ptr = "<<*ptr;
delete ptr;
return 0;
}
【示例运行结果】
(4)释放动态分配的数组存储区
delete [ ]指针变量;