Инициализация элемента к нулю?
1, 3. Просто совпадение, обычно потому, что компиляторы в отладочном режиме всё инициализируют нулями (проще отлаживать). На это нельзя рассчитывать, пиши HWND window = nullptr.
2. Лучше написать std::string str;, да и всё. Можно рассчитывать, что будет пустая строка.

Почему 1,3 плохо, а 2 хорошо? Потому что HWND и HRESULT — синонимы для встроенных типов (не то указатель, не то число того же размера), а у них конструктор по умолчанию ничего не делает. А string — нормальный себе объект.
Вызывается конструктор по умолчанию. Для указателя это 0, он же nullptr.
HWND и HRESULT это void*.
Это корявая запись в стиле C#. В С++ лучше инициализирвоать сам создаваемый объект, чтобы избежать копирования (не в данном случае, а вообще, если объект имеет сложный тип). Т.е. писать сразу:
HWND window(); или HWND window = nullptr;