我意识到这是不明智的,我不打算这样做,但我很好奇以下内容是否实际上是非法的:
#include <iostream>
struct X
{
~X()
{
std::cout << "~X()\n";
}
};
int main()
{
X *x = new X;
//delete x;
x->~X();
::operator delete(x);
return 0;
}
我的理解delete x;
是相当于调用析构函数然后调用::operator delete(x);
,但是我按照标准手动这样做合法吗?我知道在使用新位置时这是一个有效的事情,但是在非位置的情况下呢?我的预感是它可能是非法的,因为delete
(而不是operator delete
)必须为 each 执行new
,但我很想知道。