C/C++学习之基础-001
1.C++虚函数的工作原理
虚函数(virtual function)需要虚函数表(virtual table)才能实现。如果一个类有函数声明成虚拟的,就会生成一个虚函数表,存放这个类的虚函数地址。若子类没有覆写虚函数,该子类的虚函数表就会存放父类的函数地址。调用这个虚函数时,就会通过虚函数表解析函数的地址。在C++中,动态绑定(dynamic bindding)就是通过虚函数表机制实现的。
2.深拷贝和浅拷贝的区别
浅拷贝会将对象所有成员的值拷贝到另一个对象里。使用浅拷贝时,必须非常小心,只有当我们知道自己在做什么时才可选用浅拷贝。多数情况下,使用浅拷贝是为了传递一块复杂结构的信息,但又不想真的复制一份数据。使用浅拷贝时,销毁对象也必须非常小心。
深拷贝除了拷贝所有成员的值,还会进一步拷贝所有的指针对象。
在实际开发中,浅拷贝很少使用。大部分情况都应该使用深拷贝,特别是当需要拷贝的结构很小时。
struct Test
{
char * ptr;
}; void shallowCopy(Test & src , Test & dest)
{
dest.ptr = src.ptr;
} void deepCopy(Test & src , Test & dest)
{
dest.ptr = (char * ) malloc(strlen(src.ptr) + );
strcpy(dest.ptr , src.ptr);
}
3.C语言的关键字“volatile”的作用
关键字volatile的作用是指示编译器,即使代码不对变量做任何改动,该变量的值仍可能会被外界修改。操作系统、硬件或其他线程都有可能修改该变量。该变量的值有可能遭受意料之外的修改。所以,每次使用时,编译器都会重新从内存中获取这个值。
volatile的整数声明语句:
int volatile x;
volatile int x;
声明指向volatile整数的指针:
volatile int * x;
int volatile * x;
指向非volatile数据的volatile指针很少见,但也是可行的:
int * volatile x;
如果声明指向一块volatile内存的volatile指针变量(指针本身与地址所指向的内存都是volatile),volatile变量不会被优化掉。
int volatile * volatile x;
volatile变量在多线程程序里很有用,对于全局变量,任意线程都可能修改这些共享的变量。我们可能不希望编译器对这些变量进行优化,我们就可以使用volatile关键字。
4.C++基类的析构函数声明为virtual的原因
确保正确调用继承关系最末端的子类的析构函数。
C/C++学习之基础-001的更多相关文章
- Pytorch_第七篇_深度学习 (DeepLearning) 基础 [3]---梯度下降
深度学习 (DeepLearning) 基础 [3]---梯度下降法 Introduce 在上一篇"深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数" ...
- 一步步学习javascript基础篇(0):开篇索引
索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...
- 一步步学习javascript基础篇(3):Object、Function等引用类型
我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...
- JavaScript学习02 基础语法
JavaScript学习02 基础语法 JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括: 各种算术运算符.比较运算符.逻辑运算符: if else语句.s ...
- jQuery学习笔记 - 基础知识扫盲入门篇
jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...
- Python3学习(1)-基础篇
Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 安装(MAC) 直接运行: brew install python3 输入:python3 --v ...
- Ant学习-001-ant 基础知识及windows环境配置
一.Ant 概要基础知识 Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发,用以构建应用,或结合其他开源测试工具例如 git.T ...
- 学习javascript基础知识系列第二节 - this用法
通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...
- 学习javascript基础知识系列第三节 - ()()用法
总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...
随机推荐
- python语法笔记(四)
1.对象的属性 python一切皆对象,每个对象都可能有多个属性.python的属性有一套统一的管理方案. 属性的__dict__系统 对象的属性可能来自于其类定义,叫做类属性:还可能 ...
- phalcon: dispatcher调度控制器
phalcon: dispatcher调度控制器 我所理解的dispatcher调度控制器,实际上是对 router或者特定的url参数给与重组. 引用特定的类: //add use Phalcon\ ...
- K-均值聚类及其在生物信息中的应用
如果一点基础没有最好先拿起一本教材开始学,<机器学习实战>还不错,P93,书上有python源码和练习数据,非常适合新手. k均值聚类 名词:簇:相似度算法 伪代码 创建K个点作为起始质心 ...
- 自定义 密码是否可见 的EditView 右侧带个小眼睛
package com.qyk.douban.widget; import android.content.Context; import android.text.Editable; import ...
- UTF-7编码
目录 1 编码 1 2 编码代码(C++) 2 3 解码代码(C++) 4 4 测试代码(VC++) 7 1 编码 UTF-7编码的规则及特点为: 1)UTF16小于等于 0x ...
- dede调用文章里的图片
{dede:arclist row='6' orderby='pubdate' typeid='5' idlist='' channelid='1'} <li><a href='[f ...
- PHP 高并发、抢票、秒杀 解决方案
对于抢票.秒杀这种业务,我说说自己对这种高并发的理解吧,这里提出个人认为比较可行的几个方案:方案一:使用队列来实现可以基于例如MemcacheQ等这样的消息队列,具体的实现方案这么表述吧比如有100张 ...
- css解决方案经验杂记
文本垂直居中 单行文本:line-height的值等于height: 多行文本:padding上下值一致即可: 还可以使用position:absolute进行绝对定位,如果是相对父级元素,则需要设置 ...
- 解决li在ie,firefox中行高不一致问题
转载 http://www.cnblogs.com/jikey/archive/2011/11/13/2247543.html li在ie与firefox的高度是不一样的,解决办法是li font-s ...
- Huffman树与编码的简单实现
好久没写代码了,这个是一个朋友问的要C实现,由于不会C,就用JAVA写了个简单的.注释掉的代码属性按照原来朋友发的题里带的参数,发现没什么用就给注释掉了. package other; import ...