随笔分类 - C/C++
摘要:GNU C和ANSI C的概念 ANSI C指的是American National Standards Institute(美国国家标准协会)C。这个标准的演进过程如下: 1989 - ANSI C (C89/C90) ↓ 1999 - ISO C (C99) ↓ 2011 - ISO C (C1
阅读全文
摘要:普通指针存在的问题 在C/C++开发时,指针导致的问题数不胜数。通常有如下几类问题: 内存泄漏:在程序运行期间,通过malloc系列函数或者C++的new申请了内存,但是忘记free或delete了。一旦这种情况反复出现,随着时间累积最终耗尽系统内存,引发系统异常。linux内核会监测到这种情况,主
阅读全文
摘要:建造者模式,也叫做生成器模式,是一种对象创建型模式。建造者模式用于创建具有多个部件的复合对象,并隐藏了复合对象的创建过程,不同的部件建造者(Builder生成器)有不同的建造方法。通过建造者模式实现了对象的构建和对象的表示的分离,也就是说,通过同样的构建过程(建造逻辑)可以创建出不同的表示(使用不同
阅读全文
摘要:动机 在之前介绍工厂模式时,我们以播放器为例,该播放器支持多种多媒体处理库,如 ffmpeg 和 gstreamer。实际上,这两个多媒体库不仅支持视频播放,还支持音频播放。那么,我们是否需要再用工厂模式重新设计一套音频播放器呢?答案是否定的。当产品类存在两个维度的划分,播放器这个例子中即 库类类型
阅读全文
摘要:简单工厂模式 动机 在实际开发中,我曾遇到这样的需求:实现一个播放器,要求支持播放列表设置、播放、停止、暂停、跳转等操作。正常情况下直接实现播放器类即可,但需求要求支持不同多媒体库(如 FFmpeg 或 GStreamer)。若分别实现两种播放器类,业务逻辑中每次操作播放器时都需判断类型;若扩展到1
阅读全文
摘要:正常情况下一个类定义后,可以创建很多实例。但是有时候我们有一种这样的需求:希望程序中只有一个这样的实例,以避免资源访问的冲突、干扰等。例如,我们知道,串口这种设备通常是独占的,如果设计一个类,使用指定串口通讯。为了避免使用冲突,在不使用单例模式时,我们必须小心谨慎的确保只有一个这样的实例存在。但是人
阅读全文
摘要:所谓特殊成员函数就是指在某些条件下,编译器会自动生成的一些成员函数: 默认构造函数 复制构造函数 析构函数 赋值运算符重载函数 移动构造函数(C++11及之后) 移动赋值运算符重载函数(C++11及之后) 规则 至于什么条件会自动生成,参见:Effective Modern Cpp ,反正我是记不太
阅读全文
摘要:在类中,如果你未显示定义下列一些函数,编译器会帮你自动生成它们的默认版本。 📌 一、编译器默认生成的六大函数 函数名称 触发条件 C++标准支持 默认构造函数 用户未定义任何构造函数时生成 C++98 析构函数 用户未定义时自动生成 C++98 复制构造函数 用户未定义时生成浅拷贝版本 C++98
阅读全文
摘要:linux C中 由于我的第一语言为C,第一环境为linux,所以这里对于C下线程创建不做过多讨论,重点在我接触不太久的C++,并且只讨论线程创建和线程终止以及资源回收。不讨论线程通信和同步。 Linux系统下的多线程遵循POSIX线程接口,通常是通过pthread库实现(libpthread.so
阅读全文
摘要:接触cmake很多年了,但是从来没自己写一个完整的CMakeLists.txt构建过自己的动态库,因为工作以来动态库我都是用别人开源的,基本没有构建自己动态库的需求。今天需要将一个使用automake构建的老库替换为cmake来构建于是了解了一些相关细节,准备迁移过来。 极简例子 以C语言为例,一个
阅读全文
摘要:在C++ Primer Plus中,最开始介绍的是变量和引用变量。变量实际就包含了左值类型的变量和右值类型的变量。 引用变量 引用是C++引入的概念,引用变量是已定义的变量的别名(alias)。引用的创建示例如下: int a = 10; int &b = a; 通过compiler explore
阅读全文
摘要:什么是函数模板 C++的函数模板提供了一种方法,让编译器根据你写的模板,来自动按需生成函数。这个模板就称之为函数模板。函数模板格式如下: template <typename AnyType> void MyFunctionTemplate(AnyType ¶m) { } 这里AnyType
阅读全文
摘要:decltype引入的原因之一是在函数模板中遇到如下情形: template <typename T1, typename T2> void foo(T1 a, T2 b) { ?type? tmp = a + b; } 此时,tmp类型该定义为哪种呢?我们知道基础数据类型相加时会自动进行类型提升,
阅读全文

浙公网安备 33010602011771号