一.深拷贝和浅拷贝?

浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(仅仅是名称不同),对其中任何一个对象的改动都会影响另外一个对象,例如:一个人叫小王,后来改名小李,结果不管是小王死了还是小李死了,都是这个人死了

深拷贝:源对象与拷贝对象独立,其中任何一个对象的改动都不会对另外一个对象造成影响,举个例子:一个人叫张三,但是后来他克隆了一个人叫李四,那么张三和李四的死就没有关系了。比较典型的是值对象: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++基础五个题(一)的更多相关文章

  1. c++基础五个题(三)

    一.一个对象访问普通函数和虚函数的时候,哪一个更快? 访问普通函数更快,因为普通成员函数在编译阶段已经被确定,因此在访问时直接调用对应地址的函数,而虚函数在调用时,需要首先在虚函数表中查找虚函数所在的 ...

  2. c++基础五个题(二)

    一.c++中static的作用 1.隐藏:当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,static函数作用就是为了隐藏 2.可以保持变量的持久:存储在静态数据区的变 ...

  3. day 70 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  4. Bootstrap <基础五>表格

    Bootstrap 提供了一个清晰的创建表格的布局.下表列出了 Bootstrap 支持的一些表格元素: 标签 描述 <table> 为表格添加基础样式. <thead> 表格 ...

  5. C#_02.14_基础五_.NET类

    C#_02.14_基础五_.NET类 一.类实例: 我们前面说过类是一个模板,我们通过类创建一个又一个的实例,通常情况下类当中的变量是每一个实例都各有一份的,互相不影响,而静态字段是除外的,静态字段是 ...

  6. day 69 Django基础五之django模型层(一)单表操作

    Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...

  7. day 57 Django基础五之django模型层之关联管理器

    Django基础五之django模型层之关联管理器   class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器.它存在于下面两种情况 ...

  8. day 56 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  9. day 55 Django基础五之django模型层(一)单表操作

      Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它 ...

随机推荐

  1. mysql设置连接等待时间(wait_timeout)

    Linux下mysql修改连接超时   1,首先进入mysql,查看 wait_timeout.interactive_timeout这个值是否为默认的8小时(即 28800)  [root@serv ...

  2. Idea使用记录--每次修改JS文件都需要重启Idea才能生效解决方法

    最近开始使用Idea,有些地方的确比eclipse方便.但是我发现工程每次修改JS或者是JSP页面后,并没有生效,每次修改都需要重启一次Tomcat这样的确不方便.我想Idea肯定有设置的方法,不可能 ...

  3. Scala开发环境搭建

    Ubuntu14.04下Scala开发环境搭建. 1:安装JDK,jdk-6u45-linux-x64.bin 将其安装到/usr/lib/jvm/jdk1.6.0_45/. 2:安装Scala,下载 ...

  4. Win8.1专业版、核心板和企业版有什么区别

    Win8.1核心版(一般就称之为Windows 8.1) + Win8.1 专业版(称之为Windows 8.1 Pro),根据用户输入的序列号(就是Win8密钥)来区分安装.Win8.1企业版(称之 ...

  5. CTO这点事(技术,业务,管理,情商,周期,趋势)转

    几乎整个互联网行业都缺 CTO,特别是一些草根背景的创业者,这个问题更加显著.从我自己的感受,身边各种朋友委托我找 CTO 的需求,嗯,算下来超过两位数了,光最近一个月就有 3 个,而且这三家都是刚拿 ...

  6. UML--核心视图之用例图

    如果说UML是一门语言,那么元素就是UML的基本词汇,视图就是语法. UML通过视图将基本元素组织在一起,形成有意义的句子. 静态视图,顾名思义,就是表达静态事物的.包括用例图.类图和包图. 用例图 ...

  7. 【转】java中byte, int的转换, byte String转换

    原文网址:http://freewind886.blog.163.com/blog/static/661924642011810236100/ 最近在做些与编解码相关的事情,又遇到了byte和int的 ...

  8. windows phone之获取当前连接WIFI的SSID

    public string GetSSIDName() { foreach (var network in new NetworkInterfaceList()) { if ( (network.In ...

  9. REVERSE关键字之REVERSE索引

    昨天说到REVERSE关键字可以指REVERSE函数和REVERSE索引,简单介绍了下REVERSE函数的含义,今天简单整理下REVERSE索引. REVERSE索引也是一种B树索引,但它物理上将按照 ...

  10. SpringMVC(二)——流程控制

    SpringMVC主要就是用来做流程控制的,这篇博客总结一下如何在流程控制添加Interceptor(拦截器),如何将进行流程Mapping映射解析,如何编写Controller(控制器). 一,首先 ...