相关疑难解决方法(0)

将operator new []和placement new与普通delete []混合

出于好奇,以下是合法的吗?

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

17
推荐指数
2
解决办法
473
查看次数