清除 'struct ' 类型的对象,没有简单的复制分配;改用赋值或值初始化
clearing an object of type 'struct ' with no trivial copy-assignment; use assignment or value-initialization instead
我正在开发一个包含 C 和 C++ 代码的模块。问题是我收到以下禁止警告。我提供了导致该警告的代码。
warning: 'void* memset(void*, int, size_t)' clearing an object of type 'struct OtherStructure_s ' with no trivial copy-assignment; use assignment or value-initialization instead [-Wclass-memaccess]\n")
struct TEST {
explicit TEST();
OtherStructure_s _otherStructure;
};
TEST::TEST(){
memset(&_otherStructure, 0, sizeof(OtherStructure_s));
}
消除该警告的最佳解决方案是什么?如果我在构造函数中初始化结构,就好像
TEST::TEST():_otherStructure(){}
这会是一个好的解决方案吗?
OtherStructure_s
没有 trivial copy assignment operator。您不能使用 memset
。可能 class 分配了一些其他资源,如堆内存。
你不需要TEST::TEST():_otherStructure(){}
。 TEST
的默认构造函数将默认构造 _otherStructure
。最好的解决方案是删除构造函数。
我正在开发一个包含 C 和 C++ 代码的模块。问题是我收到以下禁止警告。我提供了导致该警告的代码。
warning: 'void* memset(void*, int, size_t)' clearing an object of type 'struct OtherStructure_s ' with no trivial copy-assignment; use assignment or value-initialization instead [-Wclass-memaccess]\n")
struct TEST {
explicit TEST();
OtherStructure_s _otherStructure;
};
TEST::TEST(){
memset(&_otherStructure, 0, sizeof(OtherStructure_s));
}
消除该警告的最佳解决方案是什么?如果我在构造函数中初始化结构,就好像
TEST::TEST():_otherStructure(){}
这会是一个好的解决方案吗?
OtherStructure_s
没有 trivial copy assignment operator。您不能使用 memset
。可能 class 分配了一些其他资源,如堆内存。
你不需要TEST::TEST():_otherStructure(){}
。 TEST
的默认构造函数将默认构造 _otherStructure
。最好的解决方案是删除构造函数。