当一组任务完成时,我有一个发送信号的对象。这些任务在线程池中独立执行。我想在组中的所有任务完成时向观察者发送通知。
从本质上讲,这可以归结为引用计数方案。当 ref=0 时,我发送通知。一种实现方式是利用提升智能指针(或任何引用计数自动)。
class TaskCompletionNotifier {
~TaskCompletionNotifier() {
_listener->notify();
}
setListener(listener);
Listener _listener;
}
class Task {
boost::shared_ptr<TaskCompletionNotifier> _notifier;
}
我的问题是,在对象的析构函数中执行此调出是否是一种不好的做法?
最佳答案
这是天生的坏事吗?没有。
它是否会带来潜在的陷阱?是的。
确保你不允许任何异常逃脱析构函数,并且你最好确保 _listener->notify()
不会最终修改这个的任何成员数据object:它安全并且没问题,但可能会造成混淆和/或弄乱析构函数的关闭逻辑。
除此之外,继续吧。
关于c++ - 在析构函数中调用观察者是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22541677/