C++:对象通知其所有者销毁自身的通用方法

C++: A general way for an object to notify its owner to destroy itself?

本文关键字:方法 对象 通知 所有者 C++      更新时间:2023-10-16

假设ojbect创建并拥有(例如unique_ptr)一个成员对象。成员对象由外部的回调函数通过异步事件通知,当出现"结束"事件时,可以销毁该对象。成员对象通知所有者对象成员对象现在可以销毁的一般方法是什么?

回调函数还需要返回一个值。请查看代码的简化版本:

bool Child::OnNotified(event) {
 if (event == "END") {
   parent->KillMe(this); // how to this?
   return false;
 }
 return true;
}

恐怕您不会喜欢这个答案,但这是所有权的问题。如果对象A拥有对象B,则BA销毁。因此,您的"异步调用"应该由AA的另一个成员处理,告诉A删除B

其他所有破坏B的方法基本上都是黑客攻击。简而言之:如果A被其他类拥有,就不要杀死它。

没有通用方法。通常的方法是Child构造函数获取一个指向Owner类的指针/引用(看起来您已经这样做了),然后调用Owner的一个函数,该函数指示所有者删除子级。

正如注释中所指出的,子函数需要非常小心它所接触的内容,因为对象已经被删除。

如果你不想让Child成为Owner的朋友,但也不想让除了Child之外的任何人调用这个函数,你可以提供一个Ownerprivate派生的接口,然后给Child传递一个指向这个私有接口的指针。