Объектно-ориентированное самоубийство или удалить это;

Следующий код, скомпилированный с MSVC9.0, запускается и выводитDestructor четыре раза, что логично.

#include <iostream>
class SomeClass
{
public:
   void CommitSuicide()
   {
      delete this;
   }
   void Reincarnate()
   {
      this->~SomeClass();
      new (this) SomeClass;
   }
   ~SomeClass()
   {
      std::cout  << "Destructor\n";
   }
};

int main()
{
   SomeClass* p = new SomeClass;
   p->CommitSuicide();
   p =  new SomeClass;
   p->Reincarnate();
   p->~SomeClass(); //line 5
   p->CommitSuicide();
}

Я думаю, что первые 4 строки кода в main не приводят к неопределенному поведению (хотя и не совсем уверены вdelete this; вещь). Я хотел бы получить подтверждение или<заполнитель для антонима подтверждения> того, что. Но у меня есть серьезные сомнения по поводу строк 5 и 6. Разрешается явно вызывать деструктор, не так ли? Но считается ли срок службы объекта законченным после этого? То есть разрешен ли (вызван) вызов другого члена после явного вызова деструктора?

Подводя итог, какие части приведенного выше кода (если таковые имеются) приводят к неопределенному поведению (технически говоря)?

Ответы на вопрос(3)

Ваш ответ на вопрос