Является ли ручное моделирование эффектов оператора удаления в C ++ формально незаконным?

Я понимаю, что это опрометчиво, и я не предлагаю этого делать, но мне любопытно, является ли следующее формально незаконным:

#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 , но мне было бы интересно узнать конечно.

5
задан Ben Voigt 12 December 2010 в 22:48
поделиться