gpt4 book ai didi

memset 之后的 C++ 放置新

转载 作者:行者123 更新时间:2023-12-04 11:37:38 25 4
gpt4 key购买 nike

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

struct Foo {
int x;
Foo() {}
}
如果我将某个缓冲区设置为 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?
}

最佳答案

这是教科书未定义的行为。成员(member)x在构造函数之后未初始化,读取未初始化的变量是未定义的行为。
这个内存之前被其他东西填满的事实是无关紧要的。

关于memset 之后的 C++ 放置新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68713608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com