C++17(草案 N4659)[basic.compound]/3说:
指针类型的每个值都是以下之一:
指向对象或函数的指针(该指针被称为指向该对象或函数),或
超过对象末尾的指针 ([expr.add]),或
该类型的空指针值 ([conv.ptr]),或
无效的指针值。
这些类别中的哪一个属于指向对象生命周期之外已分配内存的指针,特别是以下程序中aat // (1)through// (3)和bat的值// (4)?
#include<new>
#include<algorithm>
struct S {
~S() { /* Non-trivial destructor */ }
};
struct T {
~T() { /* Non-trivial destructor */ }
};
int main() {
void* a = operator new(std::max(sizeof(S), sizeof(T)));
// (1)
a = new(a) S;
static_cast<S*>(a)->~S();
// (2)
a = new(a) T;
static_cast<T*>(a)->~T();
// (3)
operator delete(a);
void* b = operator …Run Code Online (Sandbox Code Playgroud)