C++重要知识清单:详解对象的动态建立和释放(new和delete)

本文详细介绍了C++中new和delete运算符的使用方法,包括动态分配和释放内存,类对象的动态创建与撤销,以及与C语言malloc和free函数的区别。同时探讨了new和delete与malloc和free在基础类型上的混搭使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基本语法

C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。

newdelete是运算符,不是函数,因此执行效率高。

  • new运算符动态分配堆内存

指针变量=new 类型(常量);

指针变量=new类型[表达式];

作用:从堆分配一快“类型“大小的存储空间,返回首地址,”常量“是初始化直(可缺省);创建数组对象时不能为对象指定初始值。

  • delete运算符释放已分配的内存空间

delete 指针变量;

delete[] 指针变量;

其中指针变量必须是一个new返回的指针。

new int;  //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)
new int(100);  //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址
new char[10];  //开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址
new int[5][4];  //开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址
float *p=new float (3.14159);  //开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p

2.类对象的动态创建

有时希望在需要用到对象时才建立对象,在不需要用该对象时就撤销它,释放它所占的内存空间以供别的数据使用。这样可提高内存空间的利用率。可以用new运算符动态建立对象,用delete运算符撤销对象

Box *pt;  //定义一个指向Box类对象的指针变量pt
pt=new Box;  //在pt中存放了新建对象的起始地址在程序中就可以通过pt访问这个新建的对象。如
cout<<pt->height;  //输出该对象的height成员
cout<<pt->volume( );  //调用该对象的volume函数,计算并输出体积
Box *pt=new Box(12,15,18);//C++还允许在执行new时,对新建立的对象进行初始化

在执行new运算时,如果内存量不足,无法开辟所需的内存空间,目前大多数C++编译系统都使new返回一个0指针值。只要检测返回值是否为0,就可判断分配内存是否成功。

3.一些深入理解

  • 对于基础类型,new delete和malloc free可以混搭使用。
void main()
{
	int *p = (int*)malloc(sizeof(int) * 10);
	p[0] = 1;
	delete[] p;

	int *pArray = new int[10];
	pArray[1] = 2;
	free(pArray);

	system("pause");
	return;
}
  • malloc对类进行操作时,只会分配内存大小但不会调用类的构造函数;但new会调用构造函数进行初始化
  • free只会清除内存,不会调用析构函数。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值