Что произойдет, если объекту удастся сбросить / удалить unique_ptr самого себя?

#c #unique-ptr

#c #уникальный-ptr

Вопрос:

У меня возникли некоторые проблемы с написанием этого вопроса, поэтому я просто покажу минимальный пример.

Предположим, что это класс FruitHandler , который обрабатывает объект типа Fruit , используя unique_ptr, что-то вроде этого:

 class FruitHandler {
private:
    std::unique_ptr<Fruit> m_fruit;

public:
    FruitHandler() : m_fruit{std::make_unique<Fruit>(*this)} {}

    void some_func() {
        m_fruit.func();
    }

    void clear_fruit() {
        m_fruit.reset();
    }
}
  

И это класс Fruit:

 class Fruit {
private:
    FruitHandler amp;m_handler;

public:
    Fruit(FruitHandler amp;handler) : m_handler{handler} {}
    
    void func() {
        m_handler.clear_fruit();
        // Let's say I'm accessing more member variables after this
    }
}
  

У меня было что-то подобное в моем коде с еще несколькими уровнями косвенности между обработчиком и обрабатываемым объектом.
Было еще несколько объектов, зависящих от объекта, и одна из этих вещей (или обработчик) вызывала сбой, который мне удалось решить (не избегая того, что я написал), и теперь мне просто интересно из интереса, что произойдет, если вы удалите объект таким образом. Это чем-то похоже на запись delete this ? Это неопределенное поведение?

Комментарии:

1.Это delete this просто с дополнительными шагами.

2. Ах, так что это не неопределенное поведение (если вам каким-то образом не удастся указать unique_ptr на нединамическую память, и тогда у вас возникнут другие проблемы), но вы не должны обращаться к членам после этого, верно? @StoryTeller-UnslanderMonica

3. В значительной степени, да.