类的基本函数
六大基本函数 默认构造函数 — T() 析构函数 — ~T() 拷贝构造函数 — T(const T&) 拷贝赋值运算符 — T& operator=(const T&) 移动构造函数 (C++11) — T(T&&) 移动赋值运算符 (C++11) — T& operator=(T&&) 在一个程序中演示 #includ...
六大基本函数 默认构造函数 — T() 析构函数 — ~T() 拷贝构造函数 — T(const T&) 拷贝赋值运算符 — T& operator=(const T&) 移动构造函数 (C++11) — T(T&&) 移动赋值运算符 (C++11) — T& operator=(T&&) 在一个程序中演示 #includ...
什么是内存模型 Memory Model,是C++ 11引入的一个重要概念,它定义了: 多线程环境下,不同线程如何观察内存,以及编译器和CPU可以做哪些优化。 1 为什么需要内存模型 硬件层面的乱序执行:为了提高CPU利用率,CPU会进行指令重排,且存在多级缓存(L1,L2,L3)和写缓冲区(Write Buffer)。导致不两只核心看到的内存修改顺序可能不同。 编...
线程安全 从一个经典的面试题目开始:设计一个线程安全的队列。 何谓线程安全? 在多线程并发访问同一段代码或同一份数据时,程序的行为始终正确、结果可预期,不会因为执行顺序不同而出错。 为何会不安全:多个线程同时读取变量,操作不是原子的,缺少同步或可见性保证。 常见保证安全的方法:加锁(互斥锁,读写锁),使用原子操作,使用线程安全容器。 何谓队列? 队列(Queue)是一种先进先出(FIF...
概念 进程是操作系统中资源分配的基本单位,每个进程拥有独立的地址空间。进程间通信(Inter Process Communication,IPC), 是将这些独立进程联系起来的桥梁。让进程能够交换数据、协调行为,是实现多进程协作的核心技术。[2] 由于每个进程的地址空间是独立的,进程之间想要进行信息交换就必须通过内核。因此进程间通信会带来内核态和用户态之间切换的一些性能开销。 常见的几...
智能指针 在C++中,智能指针本质上是一个“像指针一样使用的对象”,通过RAII(Resource Acquistion is Initialization,资源获取即初始化)技术自动管理分配资源的生命周期。避免手工new/delete可能带来的资源泄漏问题。RAII是C++98中最重要的技术之一,想法就是每个资源都应该有一个所有者,它由作用域对象表示:构造函数获取资源、析构函数隐式地释放...
定义 虚函数(virtual function)是在基类中用virtual声明的成员函数,允许派生类重写。并在通过基类指针/引用调用时,按对象的真实类型在运行时决定调用哪个版本。 虚函数在设计模式 “设计模式 (计算机)”)方面扮演重要角色。例如,《设计模式》一书中提到的23种设计模式中,仅5个对象创建模式就有4个用到了虚函数(抽象工厂、工厂方法、建造者、原型),只有单例没有用到。...
欢迎来到我的第一篇博客。 这是一篇开场白,也是一份约定:从今天开始,我会把学习、实践和思考系统地记录下来,持续输出有用、可复用、可验证的内容。 为什么要写这个博客 写作不是“展示结果”,而是“整理思路”的过程。很多问题在动手前看起来简单,真正落地时才会暴露细节和边界。 我希望通过博客做到三件事: 把零散经验沉淀成可检索的知识。 把踩坑过程写清楚,减少重复试错。 把复杂...