C++学习笔记——动态分配内存

在C语言中,动态分配内存时一般使用malloc()函数,但是对于非内置数据类型(如struct,enum,class等),malloc()与free()无法满足动态对象的需求,因此C++引入new与delete关键字,用来进行内存申请与释放空间。

new运算符

下面是使用 new 运算符来为任意的数据类型动态分配内存的通用语法:

new data-type;(new数据类型(初始化列表));

我们知道,malloc()函数申请内存时返回的是一个void*类型的指针,而new直接分配一个储存空间,并且指定了类型信息,并且根据初始化列表中给出的值进行初始化,是直接可以使用的内存。而且new动态创建对象时是不必为该对象命名,直接指定数据类型就行。如果内存申请成功,返回一个类型指针;如果内存申请失败,则返回NULL
例子:

char *pc = new char; //申请一段空间用来储存char类型,内存中没有初始化
int *pi=new int(10); //申请一段空间用来储存int类型,初始化为10
double *pd = new double(); //申请一段空间用来储存double类型的数据,默认初始值为0
上述代码中分别用new创建了pc,pi , pd 三个对象 ,其中pc没有初始化列表,新分配内存没有初始值;pi与pd如注释

new也可以用来创建数组对象,其语法格式如下:new数据类型[数组长度];
new数组时,后面可以加小括号(),但括号中不可以指定任何初始值,加小括号时由编绎器为其提供默认初始值,而不加小括号时不提供任何初始值。
其示例代码如下:

int *pi=new int[10] (); //pi所指的数组中10个元素初始化为0;0为默认初始值
char *pc= new char [10]; //pc所指的数组中没有提供初始值
double *pd =new double [0]; //pd是一个长度为0的·数组。这是合法的

delete运算符

在任何时候,当您觉得某个已经动态分配内存的变量不再需要使用时,您可以使用 delete 操作符释放它所占用的内存,如下所示:

delete pvalue; // 释放 pvalue 所指向的内存
直接作用于指针就可以删除由new创建的对象,释放指针所指向的内存空间。

delete 指针名字

但在释放数组对象时要在指针名前加上[],其格式如下:delete[]指针名;

delete [] 指针名字

例子:

#include <iostream>
using namespace std;

int main()
{
	int *pi=new int(10); //new一个int对象,初始值为10;
   cout<<"*pi="<<*pi<<endl;
	*pi=20;
	cout<<"*pi="<<*pi<<endl;
	char *pc= new char[10];//new一个char数组,无初始值、
	for(int i=0;i<10;i++)
	pc[i]=i+65;//存数据
	for(int i=0;i<10;i++)
		cout<<pc[i]<<" ";
	cout<<endl;
	delete pi;  //释放int(pi)对象
	delete []pc; //释放
	system("pause");
   return 0;
}
运行结果
*pi=10
*pi=20
A B C D E F G H I J
请按任意键继续. . .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值