new与delete动态分配和释放内存

(一)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;
 } 

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值