C++标准是否保证未初始化的POD成员在新的位置后保留其先前的值?
或者更准确地说,根据C++ 11,下面的断言是否总能得到满足?
#include <cstdlib>
#include <cassert>
struct Foo {
int alpha; // NOTE: Uninitialized
int beta = 0;
};
int main()
{
void* p = std::malloc(sizeof (Foo));
int i = some_random_integer();
static_cast<Foo*>(p)->alpha = i;
new (p) Foo;
assert(static_cast<Foo*>(p)->alpha == i);
}
Run Code Online (Sandbox Code Playgroud)
C++ 03的答案是否相同?
获取自动或动态存储期限的对象的存储时,该对象具有不确定值,如果未对该对象进行初始化,则该对象将保留不确定值,直到该值被替换。
为对象获取存储究竟意味着什么?考虑这个代码片段:
int a = 0;
new (&a) int;
Run Code Online (Sandbox Code Playgroud)
new 表达式int创建的对象的存储是什么时候获取的?是在定义创建的原始对象的存储被获取时,还是在new-expression创建对象时获取?
(旁注:根据P0593,由于[basic.life] p4,这个新对象将具有不确定的值,但是,没有明确指定,除非在创建第二个对象时考虑获取存储空间)
编辑:这似乎是未答复的缺陷报告CWG 1997 的主题