Это просто для защиты от неинициализированного A::_mem
, когда T
является типом POD или встроенным (например, int
). Использование списка инициализатора конструктора : _mem(T())
по умолчанию создаст T
и инициализирует _mem
с ним. Например:
struct POD {
int num;
};
// ...
A<POD> a;
Здесь a._mem
будет унифицированно (в данном случае это означает, что a._mem.num
унифицированно.) : _mem(T())
предотвращает это и инициализирует a._mem.num
в 0.
Однако, начиная с C ++ 11, вы можете просто использовать встроенную инициализацию:
template <typename T>
class A {
public:
A() {};
private:
T _mem{};
};
T _mem{};
будет конструировать по умолчанию _mem
, что, в свою очередь, означает, что POD::num
будет построено по умолчанию, что для int
означает, что оно будет инициализировано нулями.