Согласно принятому (и единственному) ответу на этот вопрос,
Определение конструктора с помощью
MyTest() = default;
вместо этого будет нулевая инициализация объекта.
Тогда почему следующее,
#include <iostream>
struct foo {
foo() = default;
int a;
};
struct bar {
bar();
int b;
};
bar::bar() = default;
int main() {
foo a{};
bar b{};
std::cout << a.a << ' ' << b.b;
}
произвести этот вывод:
0 32766
Оба конструктора определены по умолчанию? Правильно? И для типов POD, инициализация по умолчанию - инициализация нуля.
И согласно принятому ответу на этот вопрос,
Если член POD не инициализируется ни в конструкторе, ни через инициализацию в классе С++ 11, он инициализируется по умолчанию.
Ответ один и тот же, независимо от стека или кучи.
В С++ 98 (а не после) новый int() был указан как выполняющий нулевую инициализацию.
Несмотря на попытки обернуть мою (хотя и крошечную) голову вокруг конструкторов по умолчанию и инициализации по умолчанию, я не смог придумать объяснения.