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; }; ```

Original source