在 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”将提供比我更好的解释。