【发布时间】:2017-01-16 09:31:23
【问题描述】:
假设我的课程没有数据:
struct Empty {
/*some methods here*/
};
还有一个派生类
struct Derived: Empty {
int a;
int b;
char c;
....
}__attribute__((packed));`
Empty 类的对象大小 = 1。派生类的空部分通常大小为 0。据我了解,编译器看到基本 Empty 类没有数据,因此它可以优化 Empty 的大小,以防它是“内部”派生的,但标准不需要这样做。
所以问题是:
我能否在编译时以某种方式确定 Derived 类的 Empty 部分并没有真正占用内存。
我知道我可以像sizeof(Derived) = sizeof(a) + sizeof(b) ... 那样进行检查,但它太冗长了,并且有几个类,如 Derived。有没有更优雅的解决方案?
【问题讨论】:
-
你为什么想知道这个?请注意,成员或基类可以占用内存而不会增加派生类的占用空间(通过使用填充丢失的空间)。另请注意,结构上的
sizeof可以小于或大于其成员和基数的sizeof之和。 -
我将使用这些派生类来表示一些网络数据。因此,所有此类派生类都将具有打包属性。此外,我将从一些模板类继承来实现奇怪重复的模板模式。这样所有的派生类都会有一些共同的功能。但是我不希望这种继承影响派生类的布局。
标签: c++