【转载】C++创建对象的两种方法
原文:http://blog.sina.com.cn/s/blog_586b6c050100dhjg.html
在C++里,有两种方法创建对象:
方法一:
ClassName object(param);
这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。
注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。
例如,我定义了一个这样的类:
class Rec
{
public:
Rec(int width,int height);
~Rec();
int getArea();
private:
int Rwidth;
int Rheight;
};
当你Rec myRec(5,5);这样创建一个myRec对象,然后打印出sizeof(myRec);的时候,会得到 8 这个结果。
因为myRec中有2个int类型的数据成员,一个int成员占4个字节,所以myRec对象占8个字节。
这种方法创建的对象,内存分配是分配到栈中的,由C++缺省创建和撤销,自动调用构造函数和析构函数
注意:该方法创建的对象调用类方法时,必须用“.”,而不能用“->”.如myRec.getArea();
=============================================================================================
方法二:
ClassName *object=new ClassName(param);
delete object;
这种方法跟java有点类似,相同的是,它们都是在堆上分配内存来创建对象的(与上不同);不同的是,C++用new创建对象时返回的是一个对象指针,object指向一个ClassName的对象,C++分配给object的仅仅是存放指针值的空间。而且,用new 动态创建的对象必须用delete来撤销该对象。只有delete对象才会调用其析构函数。
注意:new创建的对象不是用“*”或“.”来访问该对象的成员函数的,而是用运算符“->”;
例如:Rec *rec=new Rec(3,4);
rec->getArea();
delete rec;
顺便提一下:
一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存全局变量和静态变量,栈存储调用函数相关的变量、地址等,堆存储动态生成的变量。在c中是指由malloc,free运算产生释放的存储空间,在c++中就是指new和delete运算符作用的存储区域。
转载于:https://www.cnblogs.com/zhehan54/p/4758941.html
【转载】C++创建对象的两种方法相关推荐
- JavaScript创建对象的两种方法和遍历对象的属性
创建新对象有两种不同的方法: 定义并创建对象的实例 使用函数来定义对象,然后创建新的对象实例 1.定义并创建对象的实例 var person=new Object(); person.firstnam ...
- 在C++里,有两种方法创建对象:
方法一: ClassName object(param); 这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间. 注意:为节省存储空间,C++创 ...
- mysql数据库导入到excel表格数据_[转载]将EXCEL表格中的数据导入mysql数据库表中(两种方法)...
今天项目上遇到需要将excel中的数据导入到数据库的classify表中,于是乎拼命上网查阅方法,发现以下两种方法比较可行: 在此之前先说说按照网上的说法我没有试验成功的方法,将excel文件xls保 ...
- SQL Server中灾难时备份结尾日志(Tail of log)的两种方法
简介 在数据库数据文件因各种原因发生损坏时,如果日志文件没有损坏.可以通过备份结尾日志(Tail of log)使得数据库可以恢复到灾难发生时的状态. 例如: 上图中.在DB_1中做了完整备份,在Lo ...
- Android Studio导入Eclipse项目的两种方法
Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...
- centos下两种方法安装git
centos 5 64位下两种方法安装git 这里来给大家介绍下编译安装和yum安装git. 系统:centos 5.5 64位 需要的软件包:git-latest.tar.gz epel-r ...
- GridView 实现服务器端和客户端全选的两种方法
代码很简单,这里就不累述了.看代码如下: C# GridView 实现服务器端和客户端全选的两种方法 全选 转载于:https://www.cnblogs.com/rocky99261/archive ...
- 在ArcEngine下实现图层属性过滤的两种方法
转自chanyinhelv原文 在ArcEngine下实现图层属性过滤的两种方法 有时候,我们要对图层上的地物进行有选择性的显示,以此来满足实际的功能要求. 按下面介绍的方法可轻松实现图层属性过滤显示 ...
- Response.Redirect 打开新窗口的两种方法
一般情况下,Response.Redirect 方法是在服务器端进行转向,因此,除非使用 Response.Write("<script>window.location='htt ...
最新文章
- 运维企业专题(1)HTTP加速器——Varnish缓存机制前篇
- java代码统计收藏量_干货收藏 | 35个Java 代码性能优化总结(上)
- border:none 与border:0的区别
- Android之MVP 模式:简单易懂的介绍方式
- HBuilder搭建Android模拟器
- java数据结构——树的实现
- JavaScript高级程序设计 中文PDF下载
- ffmpeg转码html5,FFMPEG转码技术在HTML5视频系统中的研究与应用
- 【绘画素材】日系插画“人物表情”素材参考!告别脸部僵硬~
- 趣味点名软件_网传川大教授用刷脸软件点名 学生无人敢逃课
- [总结] Mac 安装Axure 8 闪退
- 利用Karabiner和键盘修饰键修改MAC键盘,实现打字时双手不离开字母和数字区
- open3d,读取stl/ply/obj/off/gltf/glb三维模型,并转换成点云,保存
- python中什么的布尔值不是false_不是python中的布尔值
- Deploy k8s(1.25)
- android studio环境下如何修改app名字
- Spring调用Feign报错:java.io.IOException: Incomplete output stream
- Word2Vec源码解析
- Vue项目打包部署Nginx配置及前端缓存问题解决
- 合泰lcd的c语言程序,合泰单片机HT66F70A LCD12864液晶屏驱动 汇编和c语言都有
热门文章
- 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)
- HBase简单代码实例(Java)
- Windows8 Metro开发 (04) : 保存/读取本地应用程序设置
- asp.net三层架构详解
- 算法:串联所有单词的子串
- 巧妙算法:找出数组中消息的数字
- linux命令nohup
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- spring12:注解的方式实现di(依赖注入)
- oracle 更改用户状态,密码