C++对象的动态建立和释放

在C++中,如果定义的对象是静态的,在程序运行过程中,对象所占的空间是不能随时释放的。

为提高内存空间的利用率,希望在需要用到对象时才建立对象,在不需要用该对象时就撤销它,释放它所占的内存空以供别的数据使用。

如果前面章节跟随小林的学习路线学习,应该知道可以用new运算符动态地分配内存,用delete运算符释放这些内存空间,C++对象同样适用,可以用new运算符动态建立对象,用delete运算符撤销对象。

用new运算符动态地分配内存后,将返回一个指向新对象的指针的值,即所分配的内存空间的起始地址,程序员可以获得这个地址,并通过这个地址来访 问这个对象。

C++允许在执行new时,对新建立的对象进行初始化。

用new建立的动态对象一般是不用对象名的,是通过指针访问的,主要应用于动态的数据结构,如链表。

访问链表中的结点,并不需要通过对象名,而是在上一个结点中存放下一个结点的地址,从而由上一个结点找到下一个结点,构成链接的关系。

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

C++使用delete运算符时,在释放内存空间之前,会自动调用析构函数。

C++对象赋值

C++对象之间的赋值可以通过赋值运算符=来实现。

对象赋值的一般形式为

对象名1 = 对象名2;

对象名1和对象名2必须属于同一个类。

案例:C++对象赋值

#include
using namespace std;
class Box //盒子类
{public :Box(int =10,int =10,int =10); //声明有默认参数的构造函数int volume( ); //声明求体积函数 private :int height; //高 int width; //宽 int length; //长
};
Box::Box(int h,int w,int len)
{height=h;width=w;length=len;
}
int Box::volume( )
{return height*width*length; //求体积
}
int main( )
{Box box1(2,3,4); //定义对象box1cout<<"box1的体积是:"<endl;Box box2; //定义对象box2box2=box1; //将box1的值赋给box2cout<<"box2的体积是:"<endl; return 0;
}

编译运行结果:

box1的体积是:24
box2的体积是:24--------------------------------
Process exited after 0.7038 seconds with return value 0
请按任意键继续. . .

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

C++对象的动态建立相关推荐

  1. c++对象的动态建立和释放

    c++面向对象模型初探 new和delete基本语法 类对象的动态建立和释放 编程实践 new和delete基本语法 1)在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入 ...

  2. C++之对象的动态建立和释放

    new和delete的用法: 1)在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除.在C语言中是利用库函数malloc和free来分配和撤销内存空间的.C++提供了 ...

  3. 如何在C++中动态建立二维数组

    一维数组是指针,可将二维数组看作是指针的指针:每一行是一个一维数组,而列是指向行的指针.在动态创建时,先分配指向行的指针空间,再循环维每一行申请空间. #include<iostream> ...

  4. 【转载】ABAP中数据和对象的动态创建和调用

    ABAP中数据和对象的动态创建和调用 动态创建数据或者对象是指在程序运行过程中创建数据变量或者对象实例,我们可以用引用定义来创建数据变量,格式为: CREATE DATA  gt_def TYPE ( ...

  5. 在delphi中如何动态建立类的实例

    在面向对象语言中,用两种方法建立类的实例:静态建立和动态建立.静态建立就是在程序中显式地建立类的实例,如c1 = TClass1.Create().而动态建立是在只知道类名的前题下建立类的实例.动态建 ...

  6. 动态建立Vxlan隧道实现租户访问外网实验配置(分布式网关单租户多子网场景)

    目录 基础配置 配置E V P N动态建立Vxlan隧道 在CE1.CE2.CE3开启EVPN功能 建立CE1.CE2.CE3的EVPN对等体(路由反射器方式) 配置二层广播域,并在其下配置二层VNI ...

  7. 微博动态来自Android,Android新浪微博开发(二)主UI的实现:动态建立TabActivity

    仿照官网微博,设立5个窗口,这就需要TabActivity.动态建立TabActivity的步骤如下: 1 建立所需的Activity 跟官方的一样,也建5个,里面的先空着,别忘了最后要在配置文件中加 ...

  8. MFC动态建立二叉树、序列检错以及获取父节点

    根据前序+中序或中序+后序在MFC中实现动态建立二叉树. 文章目录 根据前序+中序或中序+后序在MFC中实现动态建立二叉树. 前言 一.动态建立二叉树 1.题目要求 2.具体实现 1.对话框布局 2. ...

  9. 在Delphi中动态建立数据库结构

    在Delphi中动态建立数据库结构  刘军发 ----------------------------------------------------------------------------- ...

最新文章

  1. Python+OpenCV检测灯光亮点
  2. R语言ggplot2可视化:可视化所有日期不同时段任务的持续时间、将持续时间绘制成一条线(起始时间到结束时间),y轴表示活动发生的日期,x轴表示以小时为单位的时间
  3. 网络高可用性之流量镜像和端口流量控制
  4. 循序渐进Python3(十一) --6--  Ajax 实现跨域请求 jsonp 和 cors
  5. 一个完整的schema验证xml的样例
  6. MATLAB Robotic Toolbox 机器人工具箱示例
  7. VC 播放WAV文件
  8. Tricks(三十二)—— 二维数组转换为一维数组
  9. 【智能司法】法研杯要素识别第二名方案总结:多标签分类实践与效果对比
  10. 一个火车上遇到的女孩所引发的联想
  11. Go(Golang)编程语言
  12. EMERSON模块A6500-UM、SLS1508、MVME7100-0171、MVME61006E-0163、A6370D、SE3008、CE3008、MVME6100、VE3006,CE3008
  13. Unity3D插件 Puppet3D的使用
  14. 重装系统找不到固态_安装win10系统时无法识别固态硬盘怎么解决
  15. 上海航芯 | 热敏打印机方案分享
  16. SQL(09)_UNIQUE 约束
  17. excel学习-填充空白单元格
  18. Ubuntu中复制文件出现权限不够的问题
  19. 摘录《事实》汉斯·罗斯林
  20. Eclipse中,代码没错,但有红叉叉

热门文章

  1. Java 12新功能完整指南
  2. jooq映射原理_JOOQ事实:从JPA批注到JOOQ表映射
  3. 工厂方法设计模式示例
  4. 关于单元测试脚手架的几点思考
  5. Apache Cassandra和低延迟应用程序
  6. Java8多线程ForkJoinPool:处理异常
  7. 实用程序类与函数式编程无关
  8. MDB!= JMS,反之亦然
  9. JavaFX技巧5:可观察
  10. 列出和过滤NIO.2中的目录内容