gpt4 book ai didi

c++ - 空类的单继承层次结构是否保证 sizeof 相等?

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:05 24 4
gpt4 key购买 nike

我有一个状态机的状态类层次结构:

class BaseState
{
public:
virtual ~BaseState {}

template<typename ToCompareWith>
bool in() const
{
return (dynamic_cast<const ToCompareWith*>(this) != 0);
}
};

class SubState : public BaseState {};
class SubSubState : public SubState {};

在我的机器上,sizeof 为所有类返回 4。我想知道这是否一致。我知道它不适用于多重继承,因为内存对齐更复杂。我想知道这一点,因为我想在转换到新状态(当前状态实例存储在基类指针中)时使用placement new(进入旧状态内存位置)。我知道我可以在某处存储我所有状态的静态数据,但这不是这里的重点。

最佳答案

不,不能保证从基类派生空类所增加的大小。该标准允许不添加尺寸。

请注意,只有当您明确管理对象时,用 dtor/placement new 替换对象才有效:例如,您不能更改堆栈上普通对象的类型。但是,您可以使用 C++11 无限制 union 。您只需列出所有潜在的转换并在状态更改时销毁/创建合适的成员。这样您也不依赖于对象大小。

关于c++ - 空类的单继承层次结构是否保证 sizeof 相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26944893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com