c++基础五个题(一)
一.深拷贝和浅拷贝?
浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(仅仅是名称不同),对其中任何一个对象的改动都会影响另外一个对象,例如:一个人叫小王,后来改名小李,结果不管是小王死了还是小李死了,都是这个人死了
深拷贝:源对象与拷贝对象独立,其中任何一个对象的改动都不会对另外一个对象造成影响,举个例子:一个人叫张三,但是后来他克隆了一个人叫李四,那么张三和李四的死就没有关系了。比较典型的是值对象:int,double,struct,Enum
为什么区分:类中默认构造函数是浅拷贝,一般情况下,默认构造函数也就是浅拷贝是可以满足基本需求的,但是,当出现动态成员的时候,一个类的析构函数会将内存释放掉,这时候另一个类的指针就变成了野指针,所以应该使用自己编写的拷贝构造函数进行为新对象分配空间,这就变成了深度拷贝,因为不在共用一个内存(实例)了。
二。引用和指针的区别?
1.引用只是一个别名,指针是地址
2.指针可以在运行时改变其所指向的地址,但是引用一旦和对象绑定就不能再改变
3.从内存看,指针会分配内存区域,而引用不会,他仅仅是一个别名
4.参数传递时,饮用会做类型检查,指针不会
5.引用不能为空,指针可以为空
三。const和define有什么区别
1.define只是字符串替换,const参与编译运行
2.define不会做类型检查,const拥有类型,会执行相应的检查
3.define仅仅是宏替换,不占用内存,const会占用内存
4.const内存效率高,编译器通常会将const变量保存到符号表中,而不会分配存储空间,这使得它成为一个编译期间的常量,没有存储和读取的操作
四。define和inline的区别?
1.define只是字符串替换,inline由编译器控制
2.define只是简单地宏替换,通常会产生二义性,而inline会真正地编译到代码中
3.inline是否展开由编译器决定,有时候当函数太大时,编译器可能选择不展开相应的函数
五。malloc和new的区别?
1.malloc/free是标准库函数,new/delete是c++运算符,都可以用于动态内存的申请和释放
2.对于基本类型来说,他们没有什么区别,但是对于非内部对象(如类)而言,对象在创建和销毁的时候要进行构造和析构,但是malloc/free而言,他们是库函数而不是运算符,所以不在编译器的权限内,所以不能把构造析构函数的任务强加于malloc/free
3.所以c++增加了new/delete函数,new负责创建和初始化对象,delete负责清理和释放内存,new和delete是运算符
4.c++程序调用C函数,而c程序只能使用malloc/free管理动态内存,c++则两者都可以
5.new可以认为是malloc加行构造函数,delete是free加上析构函数。new出来的指针是带有类型的,malloc指针都是void指针
c++基础五个题(一)的更多相关文章
- c++基础五个题(三)
一.一个对象访问普通函数和虚函数的时候,哪一个更快? 访问普通函数更快,因为普通成员函数在编译阶段已经被确定,因此在访问时直接调用对应地址的函数,而虚函数在调用时,需要首先在虚函数表中查找虚函数所在的 ...
- c++基础五个题(二)
一.c++中static的作用 1.隐藏:当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,static函数作用就是为了隐藏 2.可以保持变量的持久:存储在静态数据区的变 ...
- day 70 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
- Bootstrap <基础五>表格
Bootstrap 提供了一个清晰的创建表格的布局.下表列出了 Bootstrap 支持的一些表格元素: 标签 描述 <table> 为表格添加基础样式. <thead> 表格 ...
- C#_02.14_基础五_.NET类
C#_02.14_基础五_.NET类 一.类实例: 我们前面说过类是一个模板,我们通过类创建一个又一个的实例,通常情况下类当中的变量是每一个实例都各有一份的,互相不影响,而静态字段是除外的,静态字段是 ...
- day 69 Django基础五之django模型层(一)单表操作
Django基础五之django模型层(一)单表操作 本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...
- day 57 Django基础五之django模型层之关联管理器
Django基础五之django模型层之关联管理器 class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器.它存在于下面两种情况 ...
- day 56 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
- day 55 Django基础五之django模型层(一)单表操作
Django基础五之django模型层(一)单表操作 本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它 ...
随机推荐
- CActiveForm提示中文化
一般情况下,yii框架的CActiveForm组建的提示是英文的,把它改成中文提示 首先在main.php配置文件中,设置 'language'=>'zh_cn'; 这样将会使得cannot b ...
- strace基本操作
可以发现很多真正在系统层面发生的调用,以及很细微的返回错误信息,用于调试工作.(比如,软件出错,或是性能变慢...) strace -p 32000 -o strace.txt 基本上完整的用法是这样 ...
- eclipse打开文件位置Open Explorer 插件
,OpenExplorer插件可以满足这个功能,可以到https://github.com/samsonw/OpenExplorer/downloads下载最新版本,将jar包放到eclipse的pl ...
- 转:完善eclipse+pdt作php开发中的代码提示能力
在eclipse开发中 ,可能由于各种原因导致项目文件(eclipse内置)丢失或错乱, 因而, 失去一些能力.. 以下是经过被痛苦折磨后查阅总结的一点东西 设置完下面内容, 支持以下特性 PHP: ...
- eclipse php 开发环境配置
一般常用的是eclipse+pdt.我是直接下载的Eclipse for php :http://www.eclipse.org/downloads/packages/eclipse-php-deve ...
- 杭电2059(dp)
龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 给Select赋值 innerHTML 不兼容IE6\IE7\IE8\IE9
<select class="b-select" id="location-province" name="Province" def ...
- poj 2288 Islands and Bridges_状态压缩dp_哈密尔顿回路问题
题目链接 题目描述:哈密尔顿路问题.n个点,每一个点有权值,设哈密尔顿路为 C1C2...Cn,Ci的权值为Vi,一条哈密尔顿路的值分为三部分计算: 1.每一个点的权值之和 2.对于图中的每一条CiC ...
- How to uninstall (remove) JAVA from OS X Lion
Open terminal (Applications -> Utilities -> Terminal) To remove JVM enter folowing: sudo rm -r ...
- A10 平板开发一硬件平台搭建
A10板子从原理图设计.接插件布局.PCB设计到物料采购以及贴片,最后调试,花了不少时间,刚刚把屏点亮了,系统总算跑起来了.整个过程遇到不少问题,包括与外面工程师沟通.硬件测试.软件调试,还有很多问题 ...