标签归档:object

C++ OOP编程综述

嵌套类和局部类

  • 定义在类X内的类Y称为嵌套类,它就是一个普通类,只不过使用的作用域被限制了.
  • 定义在函数内的类Y称为局部类,这种类限制很多,主要用于在语言层面支持Lambda,实践中基本不用.

struct和class的内存布局

  • C++的struct和class实例大小不会为0,即便它内部没有任何成员函数或成员变量.主要是因为编译器总是需要为实例分配内存,使得对象能获得有效的地址,且不同对象的地址总应该是不同的.
  • 类型布局相关的种类有很多,如POD,Aggragate,naive等,具体我也不是很清楚,总之很麻烦.
    • 如果需要把sturct或class对象通过C风格直接从内存层面管理(如memcpy),那么就必须要求它的内存布局是平凡的.
  • C++11之后,编译器只保证:
    • 同一个权限声明符block内的对象是顺序存储的(可能因对齐而不连续)
    • 同一个权限声明符level的不同block相对顺序是确定的
    • 编译器允许在满足上面约束的前提下任意重排类的内存布局.
  • 多继承时,相当于每个基类对象顺序排布在内存中.
    • 例如,若C继承自A和B,那么C的布局整体上看是[[vptrA,...][vptrB,...]],vptrA指向了TableC_A,vptrB
Read More