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,它 ...
随机推荐
- css 三角实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- [POJ] 2785 4 Values whose Sum is 0(双向搜索)
题目地址:http://poj.org/problem?id=2785 #include<cstdio> #include<iostream> #include<stri ...
- php缓存技术常用函数
OB缓存系列函数(输出缓存) ob_start()函数:打开输出缓冲区. 函数格式 ob_start(void) 说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在ob缓冲区 ...
- DJANGO的HTTPRESPONSE流式输出
在项目当中遇到的问题,网上有样例代码,但都不行,后来,发现在了1.5版本之后,新的STREAMHTTPRESPONSE对象, 搞定. from django.http import HttpRespo ...
- hex格式介绍及转bin格式的源程序
Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量.Intel HEX文件经常被用于将程序或数据传输存储到 ...
- qt捕获全局windows消息(使用QAbstractNativeEventFilter,然后注册这个类)
qt 如何捕获全屏的鼠标事件,这个帖子上面主要讲述了下嵌入式qt怎么抓取系统级消息,不过从这篇文章中我也看到了希望,有个回复说winEventFilter支持这种方式,然后我就顺着这个线索找到了na ...
- C# 文件夹操作
追加文件 StreamWriter sw = File.AppendText(Server.MapPath(] != Path.DirectorySeparatorChar) a ...
- Linux中使用mysqldump对MySQL数据库进行定时备份
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH expo ...
- windows多线程同步总结
1.多线程同步与多线程互斥的关系 其实这也是我一直困扰的问题,在这里我只是说说我的理解.我的理解是多线程互斥是针对于多线程资源而言的. 而多线程同步是针对于多线程时序问题.由于线程的并发性导致其运行时 ...
- Spring框架下的单元测试方法
介绍在Spring的框架下,做单元测试的两种办法. 一.使用spring中对Junit框架的整合功能 除了junit4和spring的jar包,还需要spring-test.jar.引入如下依赖: & ...