如何解决如果对象设法重置/删除自身的unique_ptr会发生什么?
我在写这个问题时遇到了很多麻烦,所以我只展示一个最小的例子。
假设这是一个类FruitHandler
,它使用unique_ptr处理Fruit
类型的对象,如下所示:
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();
}
}
这是水果类:
class Fruit {
private:
FruitHandler &m_handler;
public:
Fruit(FruitHandler &handler) : m_handler{handler} {}
void func() {
m_handler.clear_fruit();
// Let's say I'm accessing more member variables after this
}
}
我的代码中有类似的东西,在处理程序和被处理对象之间还有更多的间接层。
还有更多的对象依赖于该对象,其中之一(或处理程序)正在导致崩溃,而我设法解决了该崩溃(不是通过避免编写的东西),现在我只是出于好奇而想知道如果您以这种方式删除对象,则会发生这种情况。这有点类似于写delete this
吗?这是未定义的行为吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。