出于好奇,以下是合法的吗?
X* p = static_cast<X*>(operator new[](3 * sizeof(X)));
new(p + 0) X();
new(p + 1) X();
new(p + 2) X();
delete[] p; // Am I allowed to use delete[] here? Or is it undefined behavior?
Run Code Online (Sandbox Code Playgroud)
同理:
X* q = new X[3]();
(q + 2)->~X();
(q + 1)->~X();
(q + 0)->~X();
operator delete[](q);
Run Code Online (Sandbox Code Playgroud) c++ arrays initialization placement-new dynamic-memory-allocation