我已经开始采用这种模式:
template<typename T>
struct DefaultInitialize
{
DefaultInitialize():m_value(T()){}
// ... conversions, assignments, etc ....
};
这样,当我有带有原始成员的类时,我可以将它们设置为在构造时初始化为 0:
struct Class
{
...
DefaultInitialize<double> m_double;
...
};
我这样做的原因是为了避免必须记住初始化每个构造函数中的成员(如果有多个构造函数)。我想弄清楚是否:
这是一个有效的模式吗?
我想说,这是一个已知的“有效”模式。 Boost 有一个类模板,名为value_initialized http://www.boost.org/doc/libs/1_39_0/libs/utility/value_init.htm这也正是这样做的。
我使用的术语正确吗?
那么,您的模板可以进行优化,以减少对类型参数的要求。截至目前,您的类型T
不幸的是,需要一个复制构造函数。让我们将初始化程序更改为以下内容
DefaultInitialize():m_value(){}
那么,从技术上讲,这种初始化称为value initialization
,从 C++03 开始。这有点奇怪,因为一开始就没有提供任何价值。嗯,这种初始化看起来像默认初始化,但旨在用零填充,但尊重任何用户定义的构造函数并执行它。
总而言之,您所做的就是对具有类型的对象进行值初始化T
,然后将该对象复制到m_value
。我上面的版本是直接对成员进行值初始化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)