原文: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++创建对象的两种方法相关推荐

  1. JavaScript创建对象的两种方法和遍历对象的属性

    创建新对象有两种不同的方法: 定义并创建对象的实例 使用函数来定义对象,然后创建新的对象实例 1.定义并创建对象的实例 var person=new Object(); person.firstnam ...

  2. 在C++里,有两种方法创建对象:

    方法一: ClassName object(param); 这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间. 注意:为节省存储空间,C++创 ...

  3. mysql数据库导入到excel表格数据_[转载]将EXCEL表格中的数据导入mysql数据库表中(两种方法)...

    今天项目上遇到需要将excel中的数据导入到数据库的classify表中,于是乎拼命上网查阅方法,发现以下两种方法比较可行: 在此之前先说说按照网上的说法我没有试验成功的方法,将excel文件xls保 ...

  4. SQL Server中灾难时备份结尾日志(Tail of log)的两种方法

    简介 在数据库数据文件因各种原因发生损坏时,如果日志文件没有损坏.可以通过备份结尾日志(Tail of log)使得数据库可以恢复到灾难发生时的状态. 例如: 上图中.在DB_1中做了完整备份,在Lo ...

  5. Android Studio导入Eclipse项目的两种方法

    Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...

  6. centos下两种方法安装git

    centos 5 64位下两种方法安装git 这里来给大家介绍下编译安装和yum安装git.   系统:centos 5.5 64位   需要的软件包:git-latest.tar.gz epel-r ...

  7. GridView 实现服务器端和客户端全选的两种方法

    代码很简单,这里就不累述了.看代码如下: C# GridView 实现服务器端和客户端全选的两种方法 全选 转载于:https://www.cnblogs.com/rocky99261/archive ...

  8. 在ArcEngine下实现图层属性过滤的两种方法

    转自chanyinhelv原文 在ArcEngine下实现图层属性过滤的两种方法 有时候,我们要对图层上的地物进行有选择性的显示,以此来满足实际的功能要求. 按下面介绍的方法可轻松实现图层属性过滤显示 ...

  9. Response.Redirect 打开新窗口的两种方法

    一般情况下,Response.Redirect 方法是在服务器端进行转向,因此,除非使用 Response.Write("<script>window.location='htt ...

最新文章

  1. 运维企业专题(1)HTTP加速器——Varnish缓存机制前篇
  2. java代码统计收藏量_干货收藏 | 35个Java 代码性能优化总结(上)
  3. border:none 与border:0的区别
  4. Android之MVP 模式:简单易懂的介绍方式
  5. HBuilder搭建Android模拟器
  6. java数据结构——树的实现
  7. JavaScript高级程序设计 中文PDF下载
  8. ffmpeg转码html5,FFMPEG转码技术在HTML5视频系统中的研究与应用
  9. 【绘画素材】日系插画“人物表情”素材参考!告别脸部僵硬~
  10. 趣味点名软件_网传川大教授用刷脸软件点名 学生无人敢逃课
  11. [总结] Mac 安装Axure 8 闪退
  12. 利用Karabiner和键盘修饰键修改MAC键盘,实现打字时双手不离开字母和数字区
  13. open3d,读取stl/ply/obj/off/gltf/glb三维模型,并转换成点云,保存
  14. python中什么的布尔值不是false_不是python中的布尔值
  15. Deploy k8s(1.25)
  16. android studio环境下如何修改app名字
  17. Spring调用Feign报错:java.io.IOException: Incomplete output stream
  18. Word2Vec源码解析
  19. Vue项目打包部署Nginx配置及前端缓存问题解决
  20. 合泰lcd的c语言程序,合泰单片机HT66F70A LCD12864液晶屏驱动 汇编和c语言都有

热门文章

  1. 动态添加综合布局---动态添加控件及将某XML动态加入到Activity显示(续)
  2. HBase简单代码实例(Java)
  3. Windows8 Metro开发 (04) : 保存/读取本地应用程序设置
  4. asp.net三层架构详解
  5. 算法:串联所有单词的子串
  6. 巧妙算法:找出数组中消息的数字
  7. linux命令nohup
  8. C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
  9. spring12:注解的方式实现di(依赖注入)
  10. oracle 更改用户状态,密码