В C ++ классы / структуры идентичны (с точки зрения инициализации).
Структура, отличная от POD, также может иметь конструктор, чтобы она могла инициализировать элементы.
Если ваша структура является POD, вы можете использовать инициализатор.
struct C
{
int x;
int y;
};
C c = {0}; // Zero initialize POD
В качестве альтернативы вы можете использовать конструктор по умолчанию.
C c = C(); // Zero initialize using default constructor
C c{}; // Latest versions accept this syntax.
C* c = new C(); // Zero initialize a dynamically allocated object.
// Note the difference between the above and the initialize version of the constructor.
// Note: All above comments apply to POD structures.
C c; // members are random
C* c = new C; // members are random (more officially undefined).
Я полагаю, что valgrind жалуется, потому что так работал C ++. (Я не совсем уверен, когда C ++ был обновлен с конструкцией по умолчанию с нулевой инициализацией). Лучше всего добавить конструктор, который инициализирует объект (конструкции допускаются конструкторами).
В качестве примечания:
Многие новички пытаются оценить init:
C c(); // Unfortunately this is not a variable declaration.
C c{}; // This syntax was added to overcome this confusion.
// The correct way to do this is:
C c = C();
Быстрый поиск "Most Vexing Parse" даст лучшее объяснение, чем я.