C ++我将内存归零后如何使用结构?

时间:2014-09-16 05:20:11

标签: c++ memory struct

你好,我把结构归零了

struct hudelem_color{ byte r, g, b, a; };

我不能再使用它,所以如果我想在我做完

之后重复使用它,我会怎么做

ZeroMemory(&hudelem_color, sizeof hudelem_color)

3 个答案:

答案 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。只需使用它。

在重用数千个小对象时需要高性能的一些代码使用称为“对象池”的模式,谷歌获取更多信息......