自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 简单动态字符串(SDS)

由于传统的C语言字符串存在以下缺陷: 1. O(N)复杂度获取字符串长度; 2. 拷贝等操作可能导致缓存区溢出; 3. 字符串分配的空间没有余量,需要频繁重新分配内存; 4. 不适合存储二进制数据; #### SDS的定义 redis自定义了一组SDS的字符串类型,用来存放**需要修改**的字符串对象。 ``` // sds.h /* Note: sdshdr5 is never used, we just access the flags byte directly. * However is her.

2021-08-18 20:30:40 350

原创 《Modern Effective C++》学习笔记8 微调

条款四十一:针对可复制的形参,在移动成本低期并且一定会被复制的前提下,考虑将其按值传递 三种函数参数类型分析: // 途径一:针对左值和右值重载 class Widget { public: void addName(const std::string& newName) { names.push_back(newName); } ​ void addName(const std::string&& newName) { names...

2021-08-01 09:24:15 205

原创 《Modern Effective C++》学习笔记6 lambda表达式

条款三十一:避免默认捕获模式 捕获只能针对与在创建lambda表达式的作用域内可见的非静态局部变量(包括形参),然而实测发现静态局部变量也是可以捕获的。 默认按引用捕获模式的缺陷: lambda表达式的生存周期可能会大于默认捕获的局部变量或形参的生存周期,导致无效引用,而显式列出捕获对象可以起到提醒声明周期的作用,降低出错概率; 默认按值捕获模式的缺陷: 捕获裸指针时获得的只是一个裸指针副本,其他地方可能会delete这个指针,比如this指针; 按值捕获只能获得捕获当

2021-07-31 22:00:11 107

原创 《Modern Effective C++》学习笔记7 并发API

条款三十五:优先选用基于任务而非基于线程的程序设计 基于任务? auto fut = std::async(doAsyncWork); 基于线程? int doAsyncWork(); std::thread t(doAsyncWork); 基于线程vs基于任务 基于线程未提供获取返回值的途径,而且如果函数抛出异常,程序会终止; 基于线程的程序要求手动管理线程耗尽,超订,负载均衡以及新平台适配等种种; 基于任务拥有默认策略,能够避免以上这些问题; 基...

2021-07-31 21:59:05 102

原创 《Modern Effective C++》学习笔记5 右值引用,移动语义和完美转发

第五章:右值引用,移动语义和完美转发 移动语义:提供了比复制操作代价低得多的移动操作,提升了代码的性能; 完美转发:使得人们可以撰写接受任意实参的函数模板,并将其转发到其他函数,目标函数会接受到与转发函数所接受的完全相同的实参。 条款二十三:理解std::move和std::forward 这两个函数看起来是函数,其实它们在运行期间什么也不做,也不生成任何可执行代码。 std::move并不进行任何移动,它只是无条件地将实参强制转换成右值。 std::forward也不进行任何转发,它只是在某个

2021-07-27 22:53:22 155

原创 《Modern Effective C++》学习笔记4 智能指针

目前裸指针存在的问题: 无法从一个裸指针中看出指针指向的是单个对象还是对象数组; 无法了解裸指针是否唯一拥有这块内存,这影响是否需要用该指针进行析构操作; 即使需要进行析构,那么内存释放时使用free还是delete还是delete[]呢? 无法保证指针指向的内存一定会被释放,也无法保证只会被释放一次; 无法判断这个指针指向的内存是否已经释放,是否是个野指针; 条款十八:使用std::unique_ptr管理具备专属所有权的资源 针对上面几个问题,st

2021-07-18 17:57:02 110

原创 《Modern Effective C++》学习笔记3 转向现代C++

条款七:在创建对象时注意区分()和{} 大括号初始化的出现是为了进行统一初始化,实现一种从概念上可以用于一切场合的初始化,从以下例子中可以窥见: class Widget { ...... private: int x{0}; // 可行 int y = 0; // 可行 int z(0); // 不可行 } ​ // 不可复制对象 std::atomic<int> ai1{0}; // 可行 std::atomic&l...

2021-07-15 20:45:22 142

原创 《Modern Effective C++》学习笔记2 auto

条款五:优先选用auto,而非显式型别声明 auto的优点: 避免生成未初始化的变量; 省略冗长的变量类型的编写时间; 能够支持自动推导自己完全不知道类型的变量类型,例如lambda表达式; 方便进行代码平台切换,简化重构流程,自动转换类型; 避免由于类型不匹配导致兼容性和效率问题,例如隐式转换或者值拷贝操作产生的额外消耗; auto的缺点: auto的推导类型并不总是尽如人意,总会有些特例,参见条款二和条款六; // 例外情况 {11,1..

2021-07-11 17:02:02 184

原创 《Modern Effective C++》学习笔记1 型别推导

条款一:理解模板型别推导 背景 函数模板: template <typename T> void f(ParamType param); 变量: int x = 27; const int cx = x; const int& rx = x; ParamType情况分类 非万能引用的指针或引用, 此时如果expr是引用类型会忽略引用 template<typename T> void f(T& param); ​ f(...

2021-07-11 16:56:29 104

原创 Centos7配置samba服务

工作中总是碰到需要安装samba服务的情况,看网上那些教程,虽然写的很详细,但是太多了,我只想最快配置好一个能用的环境,所以自己整理了一点东西,作为备忘。   安装samba软件包 yum install samba samba-client -y   查看samba安装信息 rpm -qi samba   修改samba配置文件 修改配置文件/etc/samba/smb....

2018-10-05 11:43:08 516

原创 关于空类大小的测试

之前被问到空类的大小,今天就做了个测试,来验证一下空类的大小,测试代码如下#include &lt;iostream&gt; using namespace std; class empty { }; class child1 : public empty { }; class child2 : public empty { private: int a; }; int main(...

2018-05-31 21:37:09 180

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除