对象的动态建立和释放

9.7 对象的动态建立和释放

  • 当对象是静态的,程序运行中,对象所占空间不能随时释放。例如函数中定义一个对象,只有该函数结束时,该对象才释放。
  • 为提高内存空间利用率,人们希望在用到对象时才建立对象,不用时就撤销它,释放其所占内存空间以供别的数据使用。可以用new运算符动态建立对象,用delete运算符撤销对象。
  • 若已定义一个Box类,可用以下方法建立一个对象。但用户还无法访问这个对象,因为该对象既无对象名,用户又不知其地址。这种对象称为无名对象,它确实存在,但它没有名字。
new Box;
//执行此语句时,系统开辟了一段内存空间,并在此内存空间中存放一个Box类对象,同时调用该类的构造函数,以使该对象初始化(如果已对构造函数赋予此功能的话)。
  • 用new运算符动态地分配内存后,将返回一个指向新对象的指针,即所分配的内存空间的起始地址。用户可获此地址,并通过该地址来访问这个对象。这样就需定义一个指向本类对象的指针变量来存放该地址。
Box *pt;				//定义一个指向Box类对象的指针变量pt
pt=new Box;				//在pt中存放了新建对象的起始地址

//在程序中可通过pt访问这个新建的对象
cout<<pt->height;		//输出该对象的height成员
cout<<pt->volume();		//调用该对象的volume函数,计算并输出体积

//可在执行new时,对新建立的对象进行初始化
Box *pt=new Box(12,15,18);		//定义指针变量和new建立新对象合并为一个语句,并指定初值
  • 调用对象既可通过对象名,也可通过指针。用new建立的动态对象一般是不用对象名的,是通过指针访问的,其主要应用于数据结构,如链表。访问链表中的结点,并不需要通过对象名,而是在上一个结点中存放下一个结点的地址,从而由上一个结点找到下一个结点,构成链表关系。
  • 在执行new运算时,若内存量不足,无法开辟所需内存空间,大多C++编译系统都使new返回一个0的指针值。只要检测返回值是否为0,就可判断分配内存是否成功。
  • 在不需要使用由new建立的对象时,可以用delete运算符予以释放。如果用一个指针变量pt先后指向不同的动态对象,应注意指针变量的当前指向,以免删错对象。
delete pt;				//释放pt指向的内存空间,此后程序不能再使用该对象。
//在执行delete运算符时,在释放内存空间之前,自动调用析构函数,完成有关善后清理工作。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值