c++资源管理手法之raii类-编程思维

目录引入RAII类介绍RAII类的实践 引入 RAII 类作为一种资源管理的手段,为解决 C++ 内存泄漏而出现。 内存泄漏最常见的形式是用裸指针在堆上分配的内存空间(资源),之后忘了释放(简单地说就是 new 了后忘记 delete)。 int* p = new int[10]; // 使用p // ...... // 忘了delete // delete [] p; 即使记得写了 de

c++直接初始化和复制初始化-编程思维

引言 在 C++98 中有两种变量初始化方式:直接初始化和复制初始化(拷贝初始化)。 这两种初始化方式有着明显的差异,却由于编译器的优化而变得模糊。 直接初始化语法形式:objType obj(params...);,如 int x(2); 复制初始化语法形式:objType obj = param;,如 int x = 2; 其中复制初始化比较适合人类的阅读习惯,但其运行机制和性能与直接初

c/c++构建静态库和动态库-编程思维

环境说明 ubuntu 18.04 gcc 7.5.0 为什么需要库 为什么需要库?为了代码的方便复用,一是方便,二是复用。 无论静态库还是动态库,都有它们产生的历史背景,都是从旧方法中改进而来的,想了解的朋友可以查阅《深入理解计算机系统》第 7.6.2 部分。 库的一般使用方式 通常我们需要使用库(无论是 C/C++ 内置库还是第三方库),通常都是 #include 相关头文件,然后调用里面的

c语言定制debug信息-编程思维

C语言定制DEBUG信息 背景与问题 在日常编写程序中,我们经常需要输出一些调试信息帮助我们 DEBUG 或者更好的编程,通常我们的做法是这样的: 在需要的地方直接printf(...)输出有用的信息;

stl序列式容器使用注意、概念总结-编程思维

引入 最近看了《STL源码剖析》的第 4 章和第 5 章,介绍了 C++ STL 中的序列式容器和关联式容器,本文将总结序列式容器的基础概念,不会详细它们的实现原理(想知道自个儿看书吧,我目前只想了解它们的基本原理,用的时候心里有数就行)。 容器概念 容器是存储数据的地方。C++ STL 容器是一些常见数据结构的实现。任何数据结构都是为了特定的算法服务的。 数据结构:数据的特定排列方式。 根

stl关联式容器使用注意、概念总结-编程思维

引入 继上文 STL序列式容器使用注意、概念总结 继续总结关联式容器的概念以及一些使用事项。 关联式容器与容器适配器 基础容器 STL 中的关联式底层容器:RB tree, hash table,可以作为其他容器的底层结构。 1.RB tree RB tree 红黑树这玩意儿可是重量级的,书中从基本的树概念讲起,到二叉树、BST、AVL,然后才到 RB tree。简单来说,AVL 是高度极其平

c++迭代器种类与编译期间多态-编程思维

迭代器分类 C++ STL 中根据移动能力将迭代器分成了 5 类: Input Iterator 输入迭代器,只支持 operator++ 操作。 Output Iterator 输出迭代器,只支持 operator++ 操作。 Forward Iterator 前向迭代器,只支持 operator++ 操作。 Bidirectional Iterator 双向迭代器,支持 op

c/c++内存对齐原则-编程思维

C/C++内存对齐 what && why 当用户自定义类型时(struct 或 class),编译器会自动计算该类型占用的字节数。 C/C++ 为什么要内存对齐?我道行太浅,摘抄了网上的一个解释。 为了方便从内存中读取数据。假设没有内存对齐,在内存中存储一个 int 变量 x(占 4 字节),放在了地址 2-5 上。现在要读取 x 到寄存器中,CPU 知道读 int 一次应该