c++
文章平均质量分 66
千年缘
这个作者很懒,什么都没留下…
展开
-
C++11 (四) - override、final
文章目录一、C++ 继承的控制二、final1. 禁止类继承2. 禁止虚函数重载三、override一、C++ 继承的控制在 C++11 之前,一直没有控制继承的关键字。想要禁止一个类派生很麻烦,想要禁止派生类中重载某个虚函数也很麻烦。因此 C++ 11 添加了两个控制继承的关键字:final 禁止类继承、禁止虚函数重载override 显式声明为重载虚函数二、final1. 禁止类继承class B {/*..*/} final; class D: public B {}; /原创 2021-05-07 15:00:38 · 123 阅读 · 0 评论 -
C++11 (六) - 右值引用
文章目录一、左值和右值1. 左值2. 右值二、右值引用三、示例代码一、左值和右值1. 左值左值就是非临时的,有名字的,可以取地址的变量,可以在多条语句中使用2. 右值右值是指临时的对象,它们只在当前的语句中有效,包括函数返回的临时变量,常量值如 1,'a',true,lambda 表达式二、右值引用右值引用是 C++ 新标准中引入的新特性 , 主要用于避免使用临时对象构造和赋值新对象时的不必要拷贝,避免了临时对象分配,拷贝,释放的系统开销,提高了效率移动构造函数接受一个”右值引用”参数,可原创 2021-05-08 09:33:30 · 226 阅读 · 0 评论 -
C++11 (七) - 智能指针
文章目录一、智能指针的作用二、shared_ptr一、智能指针的作用由于 C++ 本身没有内存自动回收机制,程序员每次 new 出来的内存都要手动 delete。当忘记 delete,或者程序异常退出没来得及执行 delete 时,就会出现内存泄漏的问题。用智能指针便可以有效缓解这类问题,智能指针可以自动释放所指向的内存二、shared_ptr多个指针可以同时指向一个对象,共享对象的所有权,通过引用计数机制,当最后一个 shared_ptr 离开作用域时,内存才会自动释放#include <原创 2021-05-08 09:33:16 · 537 阅读 · 0 评论 -
C++11 (一) - nullptr
文章目录一、C++98 中 0 和 NULL 的使用二、C++11 中 nullptr 的使用一、C++98 中 0 和 NULL 的使用C++98 中的0即表示整数字面值0,又表示指针的0值int x = 0; // 0 表示整数 0int *p = 0; // 0 表示普通指针 0C++98 规定 NULL 就是一个整型0值 #define NULL 0,可以拿来当合法的整型使用(只是看起来比较尴尬)int *q = NULL; // NULL表示指针 0,看起来没什么不合适in原创 2021-05-07 13:49:44 · 151 阅读 · 0 评论 -
C++11 (二) - lambda 表达式
文章目录一、lambda 表达式的作用二、lambda 表达式的定义三、lambda 表达式捕获1. 值捕获2. 引用捕获3. 隐式捕获四、示例代码一、lambda 表达式的作用匿名函数是一种可调用对象,拥有函数体,但没有函数名C++11 lambda 表达式是一个匿名函数,用它可以非常方便的表示一个函数对象,使得创建快速的、一次性的函数变得简单了。lambda 表达式有 “即用即扔” 的特点,很适合不需要重复调用且运用区域单一的情景(而不是去定义一个正式的函数)二、lambda 表达式的定义[原创 2021-05-07 14:21:51 · 123 阅读 · 0 评论 -
C++11 (三) - std::function、std::bind、std::ref
文章目录一、std::bind二、std::function三、std::ref一、std::bindstd::bind 预先把一个可调用实体的某些参数绑定到已有的变量,然后产生一个新的可调用实体,可以直接赋给 std::function 对象std::bind 实际上是一种延迟计算的思想,将可调用对象保存起来,然后在需要的时候再调用,而且参数绑定支持占位符,std::placeholders::_1 代表这个位置将在函数调用时,被传入的第一个参数所替代#include <iostream&原创 2021-05-07 14:42:26 · 362 阅读 · 0 评论 -
C++11 (五) - default、delete
文章目录一、C++ 默认函数二、default三、delete一、C++ 默认函数C++中,若不显著写明,编译器会默认提供如下几个函数:构造函数析构函数拷贝构造函数拷贝赋值函数(operator=)移动构造函数C++11 为了增强对类默认函数的控制,从而让程序员更加精准地去控制默认版本的函数,引入了两种新特性:default: 显式缺省,告知编译器生成函数默认的缺省版本delete: 显式删除,告知编译器不生成函数默认的缺省版本二、default若我们在类中实现了上述函数之原创 2021-05-07 15:23:01 · 173 阅读 · 0 评论 -
虚函数与构造函数和析构函数的关系
文章目录结论1. 构造函数不能声明为虚函数2. 析构函数设为虚函数的作用结论构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时必须声明为虚函数1. 构造函数不能声明为虚函数虚函数存储在虚函数表中,这个虚函数表是由对象的 __vfptr 成员变量指向的,如果构造函数是虚函数就需要通过虚函数表来调用,可是对象还没有实例化,还没有构造 __vfptr 成员变量,也就找不到虚函数表,无法找到并调用虚函数就无法生成具体的对象,无法生成具体对象就无法调用虚函数,陷入死锁2. 析构函数设为虚函数的原创 2021-05-07 10:01:57 · 356 阅读 · 0 评论 -
c++ 虚函数内存布局示意图
文章目录一、virtual 虚函数工作原理二、虚函数内存布局1.基类和派生类同名函数,不能被继承2.单继承,无虚函数覆盖,无新增虚函数i.基类的内存布局:ii.派生类的内存布局:3.单继承,有虚函数覆盖,无新增虚函数4.单继承,有虚函数覆盖,有新增虚函数5.多继承,没有虚函数覆盖,没有新增虚函数6.多继承,有虚函数覆盖,没有新增虚函数7.多继承,有虚函数覆盖,有新增虚函数三、虚函数表指针访问1.代码示例2.安全性i. 通过基类指针访问派生类新增的虚函数ii. 访问 non-public 的虚函数一、v原创 2021-05-06 18:11:36 · 1151 阅读 · 0 评论 -
一致性hash算法
一致性hash算法一致性哈希的基本概念一致性Hash算法的容错性和可扩展性a. 容错性b. 可扩展性Hash环的数据倾斜问题代码实现a. 不带虚拟节点b. 带虚拟节点本文参考博客: 一致性哈希(hash)算法一致性哈希的基本概念一致性Hash算法也是使用取模的方法,对数据和服务器节点均取hash值,只是普通取模法是对服务器的数量进行取模,而一致性Hash算法是对 232 取模,一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,hash 值空间为 0 ~ 232-1(即哈希值是一个32位无符号整形原创 2021-05-06 17:14:27 · 325 阅读 · 0 评论