清除“struct”类型的对象,无需进行简单的复制赋值;使用赋值或值初始化代替

gri*_*ngo 5 c++ constructor struct memset

我正在开发一个包含 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")
Run Code Online (Sandbox Code Playgroud)
struct TEST {
  explicit TEST();
  OtherStructure_s _otherStructure;
};

TEST::TEST(){
  memset(&_otherStructure, 0, sizeof(OtherStructure_s));
}
Run Code Online (Sandbox Code Playgroud)

消除该警告的最佳解决方案是什么?如果我在构造函数中初始化结构, TEST::TEST():_otherStructure(){}这会是一个好的解决方案吗?

Tho*_*lik 2

OtherStructure_s没有简单的复制赋值运算符。你不能使用memset. 该类可能会分配一些其他资源,例如堆内存。

你不需要TEST::TEST():_otherStructure(){}TESTwilldefaultconstruct的默认构造函数_otherStructure。最好的解决方案是删除构造函数。