C++:对象通知其所有者销毁自身的通用方法
C++: A general way for an object to notify its owner to destroy itself?
假设ojbect创建并拥有(例如unique_ptr)一个成员对象。成员对象由外部的回调函数通过异步事件通知,当出现"结束"事件时,可以销毁该对象。成员对象通知所有者对象成员对象现在可以销毁的一般方法是什么?
回调函数还需要返回一个值。请查看代码的简化版本:
bool Child::OnNotified(event) {
if (event == "END") {
parent->KillMe(this); // how to this?
return false;
}
return true;
}
恐怕您不会喜欢这个答案,但这是所有权的问题。如果对象A
拥有对象B
,则B
应仅被A
销毁。因此,您的"异步调用"应该由A
或A
的另一个成员处理,告诉A
删除B
。
其他所有破坏B
的方法基本上都是黑客攻击。简而言之:如果A
被其他类拥有,就不要杀死它。
没有通用方法。通常的方法是Child
构造函数获取一个指向Owner
类的指针/引用(看起来您已经这样做了),然后调用Owner
的一个函数,该函数指示所有者删除子级。
正如注释中所指出的,子函数需要非常小心它所接触的内容,因为对象已经被删除。
如果你不想让Child
成为Owner
的朋友,但也不想让除了Child
之外的任何人调用这个函数,你可以提供一个Owner
从private派生的接口,然后给Child
传递一个指向这个私有接口的指针。
相关文章:
- 使用std::函数映射对象方法
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 从父类方法返回子类对象
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 为什么此派生对象无法访问基类的后递减方法?
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 正在调用shared_ptr对象方法
- 将方法转换为调用该方法的成员函子对象会导致崩溃
- 检查哪个对象调用了另一个对象的对象方法
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 没有取消引用/解包对象的标准方法?
- 使用 gmock c++ 在真实对象上调用方法
- 当我调用对象的方法时,对象的成员会发生变化
- 根据对象类调用不同的方法
- 如何在C++中循环访问未知对象方法?
- 使用动态实例化的对象填充矢量的快速方法
- 对类中的对象使用方法