Может быть, какой-то сумасшедший реализовал CSomeType
с обратной ссылкой на свой CCuriousClass
, и его деструктор иногда создает замену. Примерно так:
class CSomeType
{
public:
explicit CSomeType(CCuriousClass &parent) : parent(parent) {}
~CSomeType()
{
parent.object = respawn() ? new CSomeType(parent) : 0;
}
private:
CCuriousClass &parent;
};
Я не предлагаю, чтобы кто-либо когда-либо писал такую искаженную логику. Это, вероятно, все еще дает неопределенное поведение, так как я считаю, delete
разрешено изменять указатель. Но это может объяснить, почему кто-то может подумать, что данный код может быть действительным.
С другой стороны, это, вероятно, просто ошибка, вызванная неправильным пониманием того, как delete
работает.