相关疑难解决方法(0)

memset 之后的 C++ 放置新

假设有一个结构体,其构造函数没有初始化所有成员变量:

struct Foo {
  int x;
  Foo() {}
}
Run Code Online (Sandbox Code Playgroud)

如果我将某个缓冲区设置为 0,则在该缓冲区上使用放置 new 创建一个 Foo 实例,然后从该实例中读取 x,这是定义的行为吗?

void bar(void* buf) {
  memset(buf, 0, sizeof(Foo));
  Foo* foo = new(buf) Foo;
  std::cout << foo.x; // Is this undefined behavior?
}
Run Code Online (Sandbox Code Playgroud)

c++ memset placement-new undefined-behavior

5
推荐指数
2
解决办法
218
查看次数

标签 统计

c++ ×1

memset ×1

placement-new ×1

undefined-behavior ×1