C++类的内存分布(二)

《C++类的内存分布》中, 我们使用gdb大概了解了C++类的内存结构, 并得到了以下结论:

  • 类成员函数只有一份,所有实例共享
  • 类的成员变量有多份,不同实例维护不同的成员变量
  • 即使是继承关系,派生类的成员变量也只是基类的复制体,而不是指向同一块内存
  • 派生类会把从基类继承过来的成员变量当做自己的普通成员变量一样看待
  • 类的虚表只有一份,所有实例共享
  • 编译器在编译的时候, 通过给类添加__vptr指针指向虚表而得到虚表地址.

本文主要目的是扩展vptr和vtable部分, 深入了解C++多态的实现原理.


glibc-fopen源码阅读-补充篇-open系统调用

上一篇《glibc-fopen源码阅读》讲到了fopen是怎么工作的,以及FILE是怎么和文件关联起来的。但是再次阅读之后,发现还是有些细节存在疑问:

  1. 系统调用openat怎么就拿到了fd
  2. struct file怎么和文件内容关联起来的,什么时候关联起来的?

带着以上疑问,继续阅读系统的open类函数。不过仅了解fopen也是可以的,并不影响对glibc的文件打开过程的理解。


explicit说明符

一直对explicit的认知比较模糊, 在准备智能指针内容的时候, 看到了这个内容, 所以索性认认真真学习一遍.

简单来说, explicit表达的是: 只允许显示行为, 不允许隐式行为.

要理解上面的解释, 就需要理解哪些是C++的显示行为, 哪些是隐式行为.