一.深拷贝和浅拷贝?

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

深拷贝:源对象与拷贝对象独立,其中任何一个对象的改动都不会对另外一个对象造成影响,举个例子:一个人叫张三,但是后来他克隆了一个人叫李四,那么张三和李四的死就没有关系了。比较典型的是值对象: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. 函数:lambda表达式 - 零基础入门学习Python021

    函数:lambda表达式 让编程改变世界 Change the world by program lambda表达式 Python允许使用lambda关键字来创建匿名函数.我们提到一个新的关键字:匿名 ...

  2. akoj-1140-英雄联盟阵营

    英雄联盟阵营 Time Limit:1000MS  Memory Limit:65536KTotal Submit:54 Accepted:16 Description 符文之地——瓦罗兰,作为最大的 ...

  3. Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(一)

    在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用.虽然Q ...

  4. boostrap 弹出模态对话框,点击黑色区域不会关闭

    $('#ID_ReformDetail').modal({ backdrop: 'static', keyboard: false }); 弹出模态对话框且点击黑色部分不会关闭. <div cl ...

  5. Asset Catalog Creator Free 生成程序内图标的软件

    Asset Catalog Creator Free  生成程序内图标的软件

  6. XJOI网上同步训练DAY1 T3

    思路:一开始看到这题的时候想DP,可是发现貌似不行..因为有前缀也有后缀,而且有的后缀会覆盖到现在的前缀,这就不满足无后效性了啊! 但是有个很巧妙的思路:如果我们知道a[i]的最大值,那么p的数量和q ...

  7. jquery-ui datepicker使用

    这是一款老外设计的日期控件 很多显示方式都是国外的 需要自己调整一下 closeText: "Done", prevText: "上一月", nextText: ...

  8. checkbox全选和反选

     $("#CheckBox").click(function () {                 if (this.checked) {                    ...

  9. Reverse Linked List II 解答

    Question Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Giv ...

  10. vs2010 正式版官方下载地址

    北京时间2010年4月12日12:00,微软Visual Studio 2010 正式版提供官方下载,眼下有三个版本号,Professional/Premium/Ultimate. 注意原页面的链接R ...