Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions 编程语言C++.md
Original file line number Diff line number Diff line change
Expand Up @@ -245,9 +245,9 @@ C/C++的内容又多又杂,常常看到有人罗列相关书单,觉得毫无
3. 对象存储空间?
- 非静态成员的数据类型大小之和。

   - 编译器加入的额外成员变量(如指向虚函数表的指针)。
- 编译器加入的额外成员变量(如指向虚函数表的指针)。

- 为了边缘对齐优化加入的panding
- 为了边缘对齐优化加入的padding

4. C++空类有哪些成员函数?
- 首先,空类大小为1字节。
Expand All @@ -270,11 +270,15 @@ C/C++的内容又多又杂,常常看到有人罗列相关书单,觉得毫无
- 析构函数可以是纯虚函数,含有纯虚函数的类是抽象类,此时不能被实例化。但派生类中可以根据自身需求重新改写基类中的纯虚函数。

- 构造函数:
- 构造函数不能定义为虚函数,不仅如此,构造函数中还不能调用虚函数。因为那样实际执行的是父类对应的函数,因为自己还没有构造好(构造顺序先基类再派生类)
- 构造函数不能定义为虚函数。在构造函数中可以调用虚函数,不过此时调用的是正在构造的类中的虚函数,而不是子类的虚函数,因为此时子类尚未构造好

6. 构造函数调用顺序,析构函数呢?
- 调用所有虚基类的构造函数,顺序为从左到右,从最深到最浅

- 基类的构造函数:如果有多个基类,先调用纵向上最上层基类构造函数,如果横向继承了多个类,调用顺序为派生表从左到右顺序。

- 如果该对象需要虚函数指针(vptr),则该指针会被设置从而指向对应的虚函数表(vtbl)。

- 成员类对象的构造函数:如果类的变量中包含其他类(类的组合),需要在调用本类构造函数前先调用成员类对象的构造函数,调用顺序遵照在类中被声明的顺序。

- 派生类的构造函数。
Expand Down Expand Up @@ -362,7 +366,7 @@ C/C++的内容又多又杂,常常看到有人罗列相关书单,觉得毫无

- 全局范围中的对象:构造函数在所有函数调用之前执行,在主函数执行完调用析构函数。

- 局部自动对象:建立对象时调用构造函数,函数结束时调用析构函数
- 局部自动对象:建立对象时调用构造函数,离开作用域时调用析构函数

- 动态分配的对象:建立对象时调用构造函数,调用释放时调用析构函数。

Expand Down