首页
Sterben_01
取消

C++杂记 - 5

std::pmr 多态内存分配器 先回顾一下标准分配器 这一节最好搭配侯捷的标准STL内存分配器来看,这样可以很好帮助理解一些动作的行为。 分配器的核心就是四个步骤: 分配空间(allocate),构造对象(construct),析构对象(destruct),解分配空间(deallocate)。 标准内存分配器就提供了这四个函数。多态内存分配器也提供了这四个函数。 在标准...

Modern C++ Design 笔记

这本书有点儿老,好多和模板相关的都是脱裤子放屁 第一章 策略类 整个这一章讲的都是策略类的使用。这一部分分散在模板笔记当中。包括设计模式目前没有整理,后续会整理。 核心要点就是让类可以定制化。当把一个类拆分为多个策略的时候,首先要把设计的功能模块抽离。同时要注意寻找正交的策略,也就是彼此之间无交互,可以独立更改的策略。 第二章 技术 2.5 型别对型别的映射 (就是到底用不用SFI...

More Effective C++ 笔记

基础议题 条款4:非必要不提供默认构造 这一点可能和我们之前的认知有差异。但是也是正确的。原因是在语义上或者是设计上,针对某一些类型,如果我们不能提供一个初值来初始化一个对象,那么通过默认构造实例化出来的这个对象会是无意义的。 当然了,还有很多类型是允许有默认对象的,比如空的容器之类的。 所以,如果类型展示出:从无到有生成对象是合理的 的语义,则应该有默认构造。 但是如果类型...

Effective C++ 笔记

条款25 swap函数的实现方式 具体原因没啥好说的,都能理解。概括一下使用方式。 当标准库的std::swap对某种自定义类型效率很低的时候,提供一个swap成员函数,并且确定该函数不抛出异常。 具体自定义类应该使用pimpl手法,也就是保有资源指针。所以成员swap仅仅需要交换指针。 由于通常来说,我们的保有资源指针是private的,...

模板

C++ template 此笔记应和杂记3的模板相关部分搭配查看。 第一章 函数模板 https://youtu.be/XN319NYEOcE 0.0 一些深度理解,必须提前知道 只有函数模板(function template), 没有模板函数(templated function)。类模板同理 函数(主)模板并不是函数。函数模板没有类似于函数...

C++杂记 - 4

存储类说明符 这是一个被我忽视了的细节。在官方文档中提到了: auto或 (C++11 前)无说明符 - 自动存储期。 这类对象的存储在外围代码块开始时分配,并在结束时解分配。未声明为 static、extern 或 thread_local 的所有局部对象均拥有此存储期。 register - 自动存储期,另提示编译器将此对象置于处理器的...

笔试题整理

笔试题整理 输出下面函数的运行结果 class A { public: virtual std::string clsname() { return "A"; } std::string clsname2() { return "A"; } void test() { std::cout << "A, " << clsname()...

设计模式

设计模式 创建型模式部分 创建型模式主要关注与对象的创建。通常这类模式被用于创建对象的时候。比如抽象工厂被用于创建产品族,原型模式被用来模拟更自由的深拷贝等等。 简单工厂模式 流程 设计一个抽象产品类,它包含一些产品类公共方法的实现; 从抽象产品类中派生出多个具体产品类,如篮球类、足球类、排球类,具体产品类中实现具体产品生产的相关代码; 设计一个工厂类,工厂类中提供一...

C++杂记 - 3

C++杂记 - 3 std::bind, std::function 和 std::mem_fn std::bind 包括但不限于mem_fn的功能,更为通用的解决方案 什么是bind?我们可以把它看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。 std::bind将可调用对象与其参数一起进行绑定,绑定后的结果可以使用std::fun...

c++并发编程实战-笔记

第二章 std::thread的析构函数在线程对象没有调用join或detach的时候会调用std::terminate()。 如果一个线程我们没有调用join或detach,也就是说并没有分离出去或阻塞直至新线程执行完毕并回收资源,(也就是joinable() == true)。那么当这个线程被析构的时候,std::thread的析构函数会调用std::terminate()。这是非常...