初始化C ++结构的正确方法
|
我们的代码涉及一个POD(普通旧数据结构)结构(它是一种基本的c ++结构,其中具有其他结构和POD变量,需要在开始时对其进行初始化。)
根据我已阅读的内容,似乎:
myStruct = (MyStruct*)calloc(1, sizeof(MyStruct));
应该将所有值初始化为零,就像这样:
myStruct = new MyStruct();
但是,当以第二种方式初始化该结构时,Valgrind随后抱怨说“使用这些变量时,条件跳转或移动取决于未初始化的值”。我的理解是否存在缺陷,还是Valgrind抛出假阳性?
没有找到相关结果
已邀请:
5 个回复
郸身
另外,您可以使用默认构造函数。
我相信valgrind会抱怨,因为那是C ++过去的工作方式。 (我不完全确定何时使用零初始化默认构造升级C ++)。最好的选择是添加一个初始化对象的构造函数(允许使用构造函数)。 附带说明: 许多初学者尝试评估init:
快速搜索“最令人烦恼的解析”将提供比我更好的解释。
杭难插
的
语法应将对象值初始化。 您的结构的某些子部分是否可能实际上不是POD,并且阻止了预期的初始化?您是否可以将代码简化为仍可标记valgrind错误的可发布示例? 或者,也许您的编译器实际上并未对POD结构进行值初始化。 在任何情况下,最简单的解决方案可能是根据struct / subparts的需要编写构造函数。
剿畦缄饥小
g ++编译并运行:
掀辟髓观粟
刷遍派戳