将 100 个类数据成员初始化为零
Initialize 100 class data members to zero
有没有办法初始化具有用户定义构造函数的类的所有数据成员?
class CTest
{
private:
int a = 0;
BYTE b; CHAR* c; int d; int e; int f; int g;
public:
CTest() b:(0)
{
c = 0;
}
};
假设我的类有 100 个数据成员,我想将它们全部初始化为零。
1 个1 个做不是最佳选择。我现在使用的解决方法是:我将所有这些 100 个数据成员放在一个结构中,该结构是我的类的基础
喜欢
class : public base_with_all_members
当我想重置所有成员时,我只需在构造函数或initialize()
函数中执行以下操作。
*dynamic_cast<base_with_all_members*>(this) = {};
这确实可以正确清除所有成员。
在这种情况下,
最简单的可能是使用较新的语法进行默认值初始化。当然,就打字时间而言,它可能"不是最佳的",但生成的代码应该是可比的。
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 样式的"数据结构",然后在类的构造函数中初始化它;
struct POD {
int a;
int b;
std::unique_ptr<int> c;
// etc.
};
class CTest {
POD data_ = { };
};
进一步的替代方案可能包括使用上述 POD 数据结构的static
来初始化成员 POD。
您在评论中提到您有一些无法复制的数据成员(但大概可以移动(,并且您也在寻找某种形式的"重置"功能。POD样品可以修改为;
class CTest {
POD data_ = { };
public:
void reset()
{
data_ = POD{}; // caters for moveable and copiable types
}
};
在这里采样。
附带说明一下;这是大量的数据成员。也许进一步的数据划分也是一个好主意。当然,我接受这可能是一个非常特殊的情况,但无论如何考虑一些重构可能是值得的。
为什么不呢?然后,对于所有构造函数,它将仅在一个位置。
class Foo {
public:
Foo(): b(3) {}
private:
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
};
相关文章:
- 是否可以使用右值初始化数据成员?
- 扩展初始值设定项列表和未初始化的成员
- 初始化类成员的更好做法是什么?
- 使用 {} 初始化类成员
- 构造函数正在初始化数据成员
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- 初始化 const 成员的正确方法
- 初始化数据成员取决于构造函数中的条件
- 获取未初始化对象成员的地址是否定义良好?
- 为什么C++可以使用未初始化的成员变量(引用或指针 *NOT 值复制*)来初始化其父类的成员变量
- C - 初始化静态成员的方法
- 使用大型数据集初始化类成员向量的最有效方法
- 如何在C 11中正确初始化数据成员
- 在C++中,如果我们不在构造函数中初始化数据成员,那么类中数据成员的值会是多少
- 为什么我们需要构造函数 C++,我们可以通过函数(初始化数据或访问私有数据成员)来做同样的事情
- 正在初始化数据文件中的静态常量成员
- 用成员函数初始化数据成员
- 如何用该类的其他成员数据初始化类成员数据
- 尝试在构造函数中初始化数据成员,但失败.为什么
- 在c++中使用初始化列表初始化数据成员引用