(一)new运算符
(1)new运算符使用的一般格式:
new 类型 [初值];
用new分配空间时不指定初值。如果由于内存不足等原因而无法正常分配空间,那么new会返回一个空指针NULL,用户可以更具该指针的值判断分配空间是否成功。
例如:
new int;//开辟一个存放整形的存储空间,返回一个指向该存储空间的地址(指针)。
new int (100);//开辟一个存放整形的空间,并指定该整数的初值为100。
new *c=new char [10];//开辟一个存放字符数组的空间,返回首地址。
float *p=new float (1.14159);
//开辟一个存放单精度数的空间,并指定该实数值为3.14159,将返回该空间的地址赋给指针变量p
(2)用new动态建立一个对象:
new Worker;
编译系统开辟了一段内存空间,并在此内存空间存放了一个Worker类对象。但此时用户还无法访问这个对象,因为这个对象既没有对象名,用户也不知道它的地址,这种对象称为无名对象。它确实存在,但没有名字。
用new运算符动态分配内存后,将返回一个指向新对象的指针值,即所分配的内存空间的起始地址。用户可以获得这个地址,并通过这个地址来访问这个对象。需要定义一个指向本类的对象的指针变量来存放该地址。
Worker *pt;//定义一个指向Worker类对象的指针pt
pt=new Worker;//在pt中存放新对象的起始地址
(3)C++还允许在执行new时,对新建对象进行初始化。例如:
Student *pt=new Student (1,"zhangsan',4000);
在执行new运算符时,如果内存量不足,无法开辟所需的内存空间,目前大多数C++编译系统都会使用new返回一个0指针。只要检测返回值是否为0,就可以判断分配内存是否成功。
(二)delete运算符
delete运算符的一般形式
delete [ ] 指针变量;
例如要撤销上面用new开辟的存放单精度数的空间,方法如下:
delete p;
要撤销上面用new开辟的存放字符数组的空间,方法如下:
delete [ ] c;
要撤销上面用new开辟的对象空间,方法如下:
delete pt;
new与delete动态分配和释放内存j举例
#include<iostream>
using namespace std;
//1.new的基本用法
int *func()
{
//在堆区创建建整形数据
//new 返回的是 该数据类型的指针
int *p=new int (10);
return p;
}
void test01()
{
int *p=func();
cout<<*p<<endl;
//堆区的数据 由程序员管理开辟 程序员管理释放
//如果想释放堆区的数据,利用关键字delete
delete p;
//cout<<*p<<endl; //注意:会报错,因为内存已经被释放,再次访问就是非法操作,会报错
}
void test02()
{
//在堆区创建10个整形数据的数组
int *arr=new int[10];//10代表数组有10个元素
for(int i=0;i<10;i++)
{
arr[i]=i+100;//给10个数赋值100~109
}
for(int i=0;i<10;i++)
{
cout<<arr[i]<<endl;
}
//释放堆区数组
delete []arr;
}
int main()
{
test01();
test02();
return 0;
}