#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. В значительной степени, да.