标签归档:object

C++ OOP编程综述

嵌套类和局部类

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

struct(class)的内存布局

  • C++的struct和class实例大小不会为0,即便它内部没有任何数据变量.主要是因为编译器总是需要为实例分配内存,使得对象能获得有效的地址,且不同对象的地址总应该是不同的.
  • 类型布局相关的名词有很多,如POD,Aggragate,naive等,具体我也不是很清楚,总之很麻烦.
    • 如果需要把sturct或class对象通过C风格直接从内存层面管理(如memcpy),那么要求它的内存布局是平凡的.
  • 只要类型涉及到virtual, 那类型实例的首地址存储的一定是vptr, 涉及virtual只需满足任意一个条件:
    • 直接或间接使用虚继承
    • 直接或间接使用虚函数

一般规则

C++对象的内存布局对于理解多继承/虚继承非常重要, 基本要关注的有三点

  1. 对于任意一个类型Foo,它的编译期布局都是已知的.
  2. 对于某个指针Foo
Read More