c++ - 在析构函数中调用观察者是不好的做法吗?

标签 c++

当一组任务完成时,我有一个发送信号的对象。这些任务在线程池中独立执行。我想在组中的所有任务完成时向观察者发送通知。

从本质上讲,这可以归结为引用计数方案。当 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/

相关文章:

c++ - C++ 中带有字符串 arg 的全局函数

c++ - 智能指针和 dynamic_cast

c++ - 是否有用于 mapserver/mapscript 的 C/C++ API?

c++ - kill -3 用于 solaris 上的 C++ 应用程序

c++ - VS2017 的 QT 32 位

c++ - 警告 : null character ignored [-Wnull-character] in C++

c++ - 在 visual basic 2008 中创建 COM dll 并在 C++ 项目中使用它

c++ - C++ 中数组范围内的有效元素计数

c++ - 关于 "pure"函数对象的const和线程安全

c++ - 如何在Linux上将内置的源Boost Boost库添加到Qt Creator