将100个类数据成员初始化为零

时间:2016-02-01 05:25:26

标签: c++

有没有办法初始化具有用户定义构造函数的类的所有数据成员?

class : public base_with_all_members

想象一下,我的班级有100个数据成员,我想将它们全部初始化为零。

1做1不是最佳选择。我现在使用的解决方法是:我将所有这100个数据成员放在一个结构中,这个结构是我班级的基础

initialize()

当我想重置所有成员时,我只是在构造函数或*dynamic_cast<base_with_all_members*>(this) = {}; 函数中执行以下操作。

{{1}}

哪个会正确清除所有成员。

2 个答案:

答案 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
  }
};

Sample here

旁注;这是大量的数据成员。也许一些进一步的数据划分也是一个好主意。当然,我接受这可能是一个非常特殊的情况,但无论如何,考虑一些重新考虑因素可能是值得的。

答案 1 :(得分:2)

为什么不呢?然后它将只在你所有构造函数的一个位置。

class Foo {
    public:
        Foo(): b(3) {}

    private:
        int a = 0;
        int b = 0;
        int c = 0;
        int d = 0;
        int e = 0;
};