有没有办法初始化具有用户定义构造函数的类的所有数据成员?
class : public base_with_all_members
想象一下,我的班级有100个数据成员,我想将它们全部初始化为零。
1做1不是最佳选择。我现在使用的解决方法是:我将所有这100个数据成员放在一个结构中,这个结构是我班级的基础
像
initialize()
当我想重置所有成员时,我只是在构造函数或*dynamic_cast<base_with_all_members*>(this) = {};
函数中执行以下操作。
{{1}}
哪个会正确清除所有成员。
答案 0 :(得分:3)
最简单的可能是在这种情况下使用较新的语法进行默认值初始化。当然,它可能不是最佳的&#34;在打字时间方面,但生成的代码应具有可比性。
class CTest
{
private:
int a = 0;
BYTE b = 0;
CHAR* c = nullptr;
int d = 0;
int e = 0;
int f = 0;
int g = 0;
public:
CTest(): d(42)
// initialiser list only needed is this particular
// constructor doesn't initialise the value to 0
{
}
};
另一种选择是将数据成员转移到POD样式&#34;数据结构&#34;然后在类的构造函数中初始化它;
struct POD {
int a;
int b;
std::unique_ptr<int> c;
// etc.
};
class CTest {
POD data_ = { };
};
其他替代方案可能包括使用static
of the above POD data结构初始化成员POD。
您在评论中提到,您有某些无法复制的数据成员(但可能会被移动),并且您正在寻找某种形式的&#34;重置&# 34;功能也是如此。 POD样本可以修改为;
class CTest {
POD data_ = { };
public:
void reset()
{
data_ = POD{}; // caters for moveable and copiable types
}
};
旁注;这是大量的数据成员。也许一些进一步的数据划分也是一个好主意。当然,我接受这可能是一个非常特殊的情况,但无论如何,考虑一些重新考虑因素可能是值得的。
答案 1 :(得分:2)
为什么不呢?然后它将只在你所有构造函数的一个位置。
class Foo {
public:
Foo(): b(3) {}
private:
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
};