私はこれが賢明ではないことを認識しており、そうすることを提案していませんが、次のことが実際に正式に違法であるかどうかについて興味があります。
#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
) 、違法である可能性がありますがnew
、確実に知りたいと思います。