相关疑难解决方法(0)

对从放置new获取的指针使用operator delete的合法性

我确信这段代码应该是非法的,因为它显然不会起作用,但它似乎被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)

c++ placement-new language-lawyer delete-operator

12
推荐指数
2
解决办法
1051
查看次数