memset 有时用于初始化构造函数中的数据,如下例所示。一般情况下有效吗?总的来说这是一个好主意吗?
class A {
public:
A();
private:
int a;
float f;
char str[35];
long *lp;
};
A::A()
{
memset(this, 0, sizeof(*this));
}
不要使用memset
。它是 C 的遗留物,不适用于非 POD。具体来说,在包含任何虚函数的派生类上使用它——或者任何包含非内置函数的类——将导致灾难。
C++提供了特定的初始化语法:
class A {
public:
A();
private:
int a;
float f;
char str[35];
long *lp;
};
A::A()
: a(0), f(0), str(), lp(NULL)
{
}
老实说,我不确定,但是memset
对于浮点来说也可能是一个坏主意,因为它们的格式未指定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)