你好,我把结构归零了
struct hudelem_color{ byte r, g, b, a; };
我不能再使用它,所以如果我想在我做完
之后重复使用它,我会怎么做 ZeroMemory(&hudelem_color, sizeof hudelem_color)
答案 0 :(得分:3)
hudelem_color是一个struct / type,你需要为它定义一个对象。
hudelem_color clr;
ZeroMemory(&clr, sizeof (hudelem_color));
对memset一个结构定义毫无意义。
答案 1 :(得分:1)
使用您的示例结构
struct hudelem_color{ byte r, g, b, a; };
然后你可以有例如这个循环
bool game_continue = true;
while (game_continue)
{
hudelem_color color;
memset(&color, 0, sizeof(color));
// Use the `color` variable, do whatever you want with it
}
循环的每次迭代都定义了一个新的结构实例,并将其内存归零。这不是结构实例的严格重用,因为在循环中每次迭代都会创建一个新实例。
你也可以
hudelem_color color;
while (game_continue)
{
memset(&color, 0, sizeof(color));
// Use the `color` variable, do whatever you want with it
}
上面的循环几乎与前一个循环一样,但不是每次迭代都创建一个新实例,而是在循环之前创建一个实例,然后在每次迭代中实际重用。
我个人会推荐第一个变种。如果你这样做,为什么不简单地添加一个清除字段的默认构造函数,那么你不必每次迭代都手动完成:
struct hudelem_color
{
byte r, g, b, a;
hudelem_color() : r(0), g(0), b(0), a(0) {}
};
// ...
while (game_continue)
{
hudelem_color color;
// Here all fields of the structure variable `color` will be zero
// Use the structure as you see fit
}
答案 2 :(得分:0)
当然,去吧。你可以完全重复使用它。在ZeroMemory之后,你有一个带有r,g,b和全零的hudelem_color。只需使用它。
在重用数千个小对象时需要高性能的一些代码使用称为“对象池”的模式,谷歌获取更多信息......