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,它 ...
随机推荐
- CocosCode IDE 打包APK失败的原因
因为在lua目录下应用了git版本控制,导致打包的时候,复制(移动).git里面的文失败.从而第一次能打包成功,第二次之后就会失败.提示 os.move()失败.对应framworks/runtime ...
- js收集错误信息,错误上报
线上的代码可有有时候用户会反应不好使,一般是因为js造成的! 尤其在移动端各个手机之前的差异特别大. 下面这段代码是获取能帮助你! <script> window.onerror = fu ...
- 【转】将 Linux 应用程序移植到 64 位系统上
原文网址:http://www.ibm.com/developerworks/cn/linux/l-port64.html 随着 64 位体系结构的普及,针对 64 位系统准备好您的 Linux® 软 ...
- 【HDU1233】还是畅通工程(MST基础题)
无坑,裸题.直接敲就恩那个AC. #include <iostream> #include <cstring> #include <cstdio> #include ...
- IT技术如何转向销售创业
广州 IT 网友 14:14:10 本人本科软件工程毕业,现在在一家公司做开发(不是很技术的那种),工作接近两年感觉自 己不适合这个行业,想换销售行业,不愿意在做技术.打算从事本行业的销售,老师给点 ...
- [转载]Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
转载:http://blog.csdn.net/ithomer/article/details/6100734 知识背景: 210.25.132.181属于IP地址的ASCII表示法,也就是字符串形式 ...
- JAX-WS 可运行项目
该项目是通过JAX-WS实现的WebService服务,其中包括了1.关于最简单的WebService服务的创建2.关于文件交互的WebService的创建 代码中包括了服务端代码和客户端代码(客户端 ...
- Pure Css 菜单的使用
本人新手,之前偶尔接触Bootstrap,也做过一些响应式开发,但是都是略显皮毛,公司的业务需求也限制了深入学习. 现着手Pure Css学习,尝试了简单的左边菜单自动隐藏的demo.闲话少说,代码贴 ...
- C++: int和string相互转换
假设在一个C++的程序中常常会用到int和string之间的互换.个人建议能够写成一个函数,下次用的时候直接调用就可以. #include <iostream> #include < ...
- 给SharePoint页面加入自己定义页脚Custom footer
给SharePoint页面加入自己定义页脚Custom footer 在公司做站点设计项目时,须要在页面上加入页脚. 非常多人都把页脚忽视了,认为没什么多大用处,事实上 ...