C ++将结构数组清零?

时间:2013-03-14 10:54:31

标签: c++

struct OBJECT
{
unsigned int Var1;
std::string Str1;
...
bool YesNo;
};

OBJECT Obj[ 327 ];

我对如何将Obj归零感到困惑。它有几种不同类型的元素。我必须将其所有成员设置为0吗? 就像... Obj[0].Str = ""; ?所以问题是,这样做的正确方法是什么?

我的尝试:

::memset( &Obj, 0, sizeof( Obj ) );

我不确定我是否正确地做到了......

哦,有没有更快的方法将数组清零?

4 个答案:

答案 0 :(得分:9)

不要这样做,因为你的结构中有非平凡的成员(例如std::string)。如果您的所有成员都只是简单的数据类型,例如intchardouble或指针,则可以执行此操作。

这种结构的正确方法是定义一个构造函数,它正确地初始化所有成员

struct OBJECT {
    OBJECT() : Var1(0), YesNo(false), ... {}

    unsigned int Var1;
    std::string Str1;
    ...
    bool YesNo;
};

答案 1 :(得分:3)

“正确”的方法是为你的struct添加一个构造函数方法,初始化任何没有自己构造函数的成员变量,例如:

OBJECT_STRUCT()
: Var1(0)
, YesNo(false)
{
}

在该示例中,您会注意到Str1未初始化;这是因为std::string有自己的构造函数来初始化它。

答案 2 :(得分:1)

提供自定义默认构造函数或使用编译器定义的默认构造函数:

std::fill(std::begin(Obj), std::end(Obj), OBJECT());

请注意,fill方法仅在使用默认构造函数时才有效。

答案 3 :(得分:1)

您应该将声明更改为

struct OBJECT
{
    unsigned int Var1;
    std::string Str1;
    ...
    bool YesNo;

   OBJECT()
   : Var1()
   , Str1()
   , ...
   , YesNo(false)
   {
       // Do Nothing
   }
};

您应该在std::arraystd::vector上使用的数组将初始化对象。