我已经开始采用这种模式了:
template<typename T>
struct DefaultInitialize
{
DefaultInitialize():m_value(T()){}
// ... conversions, assignments, etc ....
};
Run Code Online (Sandbox Code Playgroud)
因此,当我有原始成员的类时,我可以将它们设置为在构造时初始化为0:
struct Class
{
...
DefaultInitialize<double> m_double;
...
};
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是为了避免必须记住在每个构造函数中初始化成员(如果有多个构造函数).我想弄清楚是否:
这是一个有效的模式?
我想说,这是一种已知的"有效"模式.Boost有一个类模板value_initialized,也可以这样做.
我使用正确的术语?
那么,您的模板可以进行优化,以减少对类型参数的要求.截至目前,您的类型T需要一个复制构造函数,不幸的是.让我们将初始化器更改为以下内容
DefaultInitialize():m_value(){}
Run Code Online (Sandbox Code Playgroud)
然后,从技术上讲,这种初始化被调用value initialization,从C++ 03开始.这有点奇怪,因为首先没有提供任何价值.好吧,这种初始化看起来像默认初始化,但是用于填充零,但是尊重任何用户定义的构造函数并执行它.
总而言之,您所做的是初始化具有类型的对象T,然后将该对象复制到m_value.我上面的版本是什么值来直接初始化成员.