Я понимаю, что это опрометчиво, и я не предлагаю этого делать, но мне любопытно, является ли следующее формально незаконным:
#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
(а не оператор delete
) должен выполняться для каждого new
, но мне было бы интересно узнать конечно.