gpt4 book ai didi

c++ - 为什么将此 POD 结构用作基类会很危险?

转载 作者:IT老高 更新时间:2023-10-28 21:36:03 25 4
gpt4 key购买 nike

我和一位同事进行了这次谈话,结果很有趣。假设我们有以下 POD 类

struct A { 
void clear() { memset(this, 0, sizeof(A)); }

int age;
char type;
};

clear 旨在清除所有成员,设置为 0 (按字节)。如果我们使用 A 作为基类会出现什么问题?这里有一个微妙的错误来源。

最佳答案

编译器可能会在 A 中添加填充字节。因此 sizeof(A) 会超出 char type(直到填充结束)。但是,在继承的情况下,编译器可能不会添加填充字节。所以对 memset 的调用会覆盖部分子类。

关于c++ - 为什么将此 POD 结构用作基类会很危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7113422/

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