Linux 下使用 /etc/issue、/etc/issue.net 和 /etc/motd 三个文件来控制近端登录和远程登录前后的信息显示,新版本还有动态 motd: /run/motd.dynamic 和 pam模块来控制。
控制echo显示信息颜色和效果
设计模式原则之:依赖倒置原则DIP
C++ STL中的智能指针
参考文章:auto_ptr, unique_ptr, shared_ptr and weak_ptr
参考文章:auto_ptr, unique_ptr, shared_ptr and weak_ptr智能指针讲解
C++ 库提供以下类型的智能指针实现:
- auto_ptr
- unique_ptr
- shared_ptr
- weak_ptr
头文件和命名空间:
1 | #include <memory> |
动态链接库 undefined symbol 问题
之前编码时使用 ACE_DLL 打开 so 动态库时,一直失败,后来打印 error 信息查看失败原因是 undefined symbol,如下所示:

发现是相关 boost 库没有链接,修改相关 CMakeLists.txt 添加相关库链接,重新编译就OK了;
后来试了下自己编写的 so 库,使用库中的class以及其中的方法时,只加了相关的头文件,没有链接相关的 so ,但是可以open成功,运行时出错。

C++ 重载、覆盖(重写)、隐藏(重定义)
C++ Lambda 表达式
参考文章:C++ 11 Lambda表达式
C++11 引入了 Lambda 表达式。利用 Lambda 表达式,可以方便的定义和创建匿名函数。
声明 lambda 表达式
lambda 表达式完整的声明格式和各项具体含义如下:
1 | 声明格式: |
利用frp进行Raspberry Pi的内网穿透
C++中的explicit关键字
C++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,explicit构造函数是用来防止隐式转换的。
隐式转换:
如果C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。
如下面所示:
C++ 虚函数表
参考文章:C++虚函数表剖析
参考文章:C++虚函数表分析
参考文章:C++中基类的析构函数为什么要用virtual虚析构函数
C++ 中的多态是用虚函数实现的:子类覆盖(重写)父类的虚函数,然后声明一个指向子类对象的父类指针,如 Base* base = new Derived(); 当调用base->func(),调用的是子类的Derived::func()。
1 | class Base |
这种机制使用了一种动态绑定的技术,技术核心是虚函数表(简称虚表)。