• 如何检测TCP连接的异常断开

    在以往的开发中,我会通过 recv() 接口的返回值来判断连接是否断开。但有时候我发现TCP连接已经无法正常收发数据了 recv() 的返回值仍然不是0。

  • 由new创建的指针不需要检查nullptr

    我们会检查空指针来判断指针是否有效。一直以来,在申请动态内存后,我都会习惯性地检查得到的指针是否为空,但是查阅了一些资料后发现这个操作是多余的。

  • 在运行时获取动态库的路径

    最近在开发一个动态库,这个动态库需要在运行时动态地加载另一个动态库。在库发布时会同时提供这两个动态库。库的使用者会主动加载第一个动态库,问题出现在第一个动态库加载第二个动态库时,如何确定第二个动态库的位置。

  • C++头文件的引用顺序

    一般在C++开发中,会使用头文件( .h/hpp )和源文件( .cpp/cxx )将函数的声明和实现分开。当需要使用某个函数时,将声明函数所在的头文件引用进来即可。在较复杂的项目中会引用很多头文件,这些头文件可能来自于标准库、操作系统相关库、第三方库和自身项目。在实际开发过程中,多个头文件的引用顺序通常并不会有很大的影响;但是从编码风格和项目维护等方面考虑,头文件的引用顺序确是值得注意的。

  • 常见的中文乱码示例

    中文乱码通常是由字符集不匹配导致的。例如,以utf-8字符集保存的文本以gbk方式打开就会出现乱码。有网友将常见的乱码情况总结成了表格,我将其保存下来,以后再遇到乱码时查阅起来就更加方便了。

  • 为指定目录和文件创建gtags

    GNU Global 是一个非常好用的代码索引工具,我在emacs中使用它进行代码跳转,本文介绍了使用中的一个小技巧。

  • 处理Linux信号需要注意的几个问题

    Linux中的信号(signal)是一个非常实用的功能,进程间能发送信号,内核也能向进程发送信号。本文总结了在进行信号编程时容易忽略的几个问题,方便后续开发过程中查阅。

  • 静态初始化顺序问题

    本文介绍了静态变量构造顺序和析构顺序所带来的一系列问题,由于这些问题的出现条件都比较特殊,它们在使用中常常会被忽略。但是在设计和开发中这些问题却是不可忽略的,最严重的可能导致程序崩溃。在开发时注意了这些问题后,你的代码会更加稳健。

  • 使用迭代器和下标访问C++容器的比较

    在遍历一个STL数组容器( vector )时,可以使用迭代器方式,也可以使用下标(索引)方式。迭代器提供了一个非常方便的访问容器元素的方式,有一种行为(behavioral)设计模式就叫做迭代器模式,这种设计模式提供复杂数据结构的顺序遍历方法,同时不会暴露内部数据结构的细节。下标访问是从C语言数组传承而来的,C++标准库的数组容器也同时提供了下标访问的操作符重载。本文从运行效率和代码风格两方面比较了二者的差异。

  • char类型的符号特性

    在C++中 char 类型用来表示字符,其数据宽度为一个字节,通常也可以将 char 用作占一个字节的整数。但整数类型又分为无符号整数和有符号整数,对于具有相同数据宽度的有符号整数和无符号整数,它们的允许的取值范围是不同的。在将 char 当作整型数据使用时,要格外注意其符号特性。

  • 查看操作系统中所有的共享内存

    最近在开发一个基于共享内存的跨平台数据缓存组件,核心思想是将数据存放在共享内存中以实现多进程间数据交换。在开发和调试过程中需要借助工具查看系统中的共享内存。本文记录了Linux和Windows下查看共享内存状态信息的方法。

  • C++11中的内存顺序

    在C++11中引入了内存顺序(memory order)这一概念,我查阅资料进行了一番研究,把认为有用的知识点整理记录下来,方便以后查阅。