我确信这段代码应该是非法的,因为它显然不会起作用,但它似乎被C++ 0x FCD所允许.
class X { /* ... */};
void* raw = malloc(sizeof (X));
X* p = new (raw) X(); // according to the standard, the RHS is a placement-new expression
::operator delete(p); // definitely wrong, per litb's answer
delete p; // legal? I hope not
Run Code Online (Sandbox Code Playgroud)
也许你们中的一位语言律师可以解释标准如何禁止这一点.
还有一个数组形式:
class X { /* ... */};
void* raw = malloc(sizeof (X));
X* p = new (raw) X[1]; // according to the standard, the RHS is a placement-new expression
::operator delete[](p); // definitely …Run Code Online (Sandbox Code Playgroud)