MST
星途 面试题库

面试题:C++ 虚基类对象内存存储模式 - 基础布局分析

请简述在C++中,当一个类继承自虚基类时,该类对象的内存布局大概是怎样的?如果有多层继承关系,且其中涉及虚基类,内存布局会有哪些变化?
17.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 单继承自虚基类时的内存布局
    • 该类对象通常会包含指向虚基类子对象的指针(虚基类指针),这个指针用于在运行时定位虚基类子对象。
    • 类自身的数据成员紧跟在这个指针之后存储。
    • 虚基类子对象的数据成员存储在对象内存布局的最后部分。
  2. 多层继承且涉及虚基类时的内存布局变化
    • 在多层继承中,如果中间层的类继承自虚基类,后续的派生类对象依然只会有一份虚基类子对象,避免了虚基类子对象的重复存储。
    • 派生类对象中,指向虚基类子对象的指针位置可能会有所变化,取决于编译器的实现,但通常还是会在对象的起始部分或者靠近起始部分存储这个指针,以方便快速定位虚基类子对象。
    • 多层继承中,类自身的数据成员按照继承顺序依次排列在对象内存布局中,而虚基类子对象的数据成员始终处于对象内存布局的末尾,确保无论有多少层继承,虚基类子对象都只有一份且在固定位置,便于通过指针访问。