Constructor initialization list with empty initialization
c++
Solution
This is known as value-initialization. From the C++03 standard, §8.5/7:
An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized.
And from §8.5/5:
To value-initialize an object of type `T` means:
- if `T` is a class type with a user-declared constructor, then the default constructor for `T` is called (and the initialization is ill-formed if `T` has no accessible default constructor);
- if `T` is a non-union class type without a user-declared constructor, then every non-static data member and base-class component of `T` is value-initialized;
- if `T` is an array type, then each element is value-initialized;
- otherwise, the object is zero-initialized
To zero-initialize an object of type `T` means:
- if `T` is a scalar type, the object is set to the value of `0` (zero) converted to `T`;
- if `T` is a non-union class type, each nonstatic data member and each base-class subobject is zero-initialized;
- if `T` is a union type, the object’s first named data member) is zero-initialized;
- if `T` is an array type, each element is zero-initialized;
- if `T` is a reference type, no initialization is performed.
So in your case, it depends on the definition of `SpiHandleT`:
- If it's a scalar, it will be zero-initialized
- If it's a class type without a user-declared constructor, its subobjects will be (recursively) value-initialized
- If it's a class type with a user-declared constructor, it will be default-constructed
Problem
What does _currentHandle() mean below? ``` template<class SpiHandleT> class SpiHandleIterator : public ISpiHandleIterator<SpiHandleT> { public: SpiHandleIterator() : _currentHandle() { } ... protected: SpiHandleT _currentHandle; }; ```