struct OBJECT
{
unsigned int Var1;
std::string Str1;
...
bool YesNo;
};
OBJECT Obj[ 327 ];
我对如何将Obj归零感到困惑。它有几种不同类型的元素。我必须将其所有成员设置为0吗?
就像... Obj[0].Str = "";
?所以问题是,这样做的正确方法是什么?
我的尝试:
::memset( &Obj, 0, sizeof( Obj ) );
我不确定我是否正确地做到了......
哦,有没有更快的方法将数组清零?
答案 0 :(得分:9)
不要这样做,因为你的结构中有非平凡的成员(例如std::string
)。如果您的所有成员都只是简单的数据类型,例如int
,char
,double
或指针,则可以执行此操作。
这种结构的正确方法是定义一个构造函数,它正确地初始化所有成员
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::array
或std::vector
上使用的数组将初始化对象。