这个问题很可能是“C++ 标准怎么说”的问题,但我的 Google 搜索没有给我正在寻找的答案。
我知道当你有类,并且你有一个类继承自另一个类时,你就进入了虚函数表的世界,因为代码需要找出哪个类包含你试图调用的函数。
但是只包含数据的结构之间的继承呢?例如,如果您有一个小部件结构,然后您想要该结构的一个特殊版本,它有一些额外的变量,但您仍然希望能够将其原始数据传递给处理小部件的函数,这样会更简单从原始小部件结构继承,而不是让您的代码处理两种类型的小部件结构。只涉及数据的继承有没有开销?专用小部件仍然是一个简单的结构(就内存布局而言),结合了两种数据,还是原始小部件数据与新数据分开存储?
最终,我想让我的数据保持简单和连续,就像基本结构一样,我不知道继承数据是否会破坏它。
最佳答案
在 C++ 内存模型中,对象始终位于连续内存中。如果你想拥有非连续的内存,你需要使用指向这个对象之外的数据的成员。也就是说,如果您继承任何类,无论它是结构体还是具有虚函数,实际对象始终是连续的。关于可能感兴趣的类型,几乎没有其他含义:如果一个类是标准布局类型,您可以例如memcpy()
对象。我不确定 C++2011 对继承和标准布局类型的看法,但我很确定 C++2003 不允许继承而 C++2011 允许继承。
关于c++ - 没有成员函数的结构的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761867/