【发布时间】:2009-05-11 21:59:05
【问题描述】:
在 C++ 中,问题很简单。
我有 2 个类,其中一个包含另一个作为其实现的一部分。
struct A
{
void do_something()
{
};
};
struct B
{
A obj_A;
void hello_world()
{
};
};
现在的问题是,当我执行 sizeof(B) 和 B 类型的对象时,如果 A 是 B 的一部分,则结构 B 会大一个字节。A 100% 只会包含非虚拟成员(没有虚拟需要表),并且不需要进行 typeid 检查。有没有办法(比如编译器指令)从 B 中完全删除不需要的字节,但仍然通过 B 访问 A 的成员函数?
我只能假设额外的字节是编译器将 char* 添加到 A 的名称“A”,但任何其他想法都会有所帮助。
【问题讨论】:
-
如果您的编译器是 g++,请尝试通过使用
g++ -fno-rtti编译来禁用 RTTI。如果问题仍然存在,请提供一个完整的 C++ 源文件以显示该问题,我将查看我的编译器产生的大小。 -
FWIW:我尝试使用 g++(版本 4.2.4)编译您的代码,使用和不使用 obj_A 成员,启用和不启用 RTTI,每次我得到 sizeof(B) == 1。所以您的问题似乎缺少一些信息。