【问题标题】:How often to derive from boost::signals::trackable?多久从 boost::signals::trackable 派生一次?
【发布时间】:2013-05-26 13:47:50
【问题描述】:

使用 Boost.Signals 时,boost 允许您从 boost::signals::trackable 派生,以简化对象/连接生命周期管理(请参阅 boost documentation)。

我在我的项目的早期阶段,我在想,是否从boost::signals::trackable中派生

  • 我编写的每一个未来可能使用 Boost.Signals 的新类
  • 或者只有在课堂上,我确信他们需要trackable bas e-class 的功能

第一种方法的主要原因是防止我忘记来自boost::signals::trackable

还有双重派生,如

class Foo : public Base, public boost::signals::trackable
{
};

变得不必要。

另一方面,防止内存泄漏不应该是主要的设计方面。应该使用 valgrind 等测试和分析工具来检测内存泄漏。

哪种方法更适合成长中的项目?

【问题讨论】:

  • 如果您担心,也许可以编写一组您总是用来连接信号/插槽的函数,而不是直接使用其中有一个静态断言的 signal::connect 类必须派生自升压::信号::可追踪。也许增强信号无论如何都提供了一种方法。这样,如果您忘记了,您的项目将无法编译。
  • 为什么不用Boost.Signals2,它有更灵活和强大的跟踪机制?
  • @IgorR。我没有看过 Boost.Signals2,因为我认为多线程支持会减慢我的应用程序的速度。但是在查看了connection Management 之后,我将使用Boost.Signals2。谢谢!
  • @Random Citizen 你甚至可以通过更改 MutexType ty dummy_mutex 来禁用锁定:boost.org/doc/libs/1_53_0/doc/html/signals2/…
  • @IgorR。谢谢你的帮助。也许将您的答案作为官方答案发布是个好主意?

标签: c++ boost coding-style boost-signals boost-signals2


【解决方案1】:

Qt 作为替代

Qt-Event 系统强制程序员从 QObject 派生,因此在使用 Qt-Events 时您确实处于保存状态。

【讨论】:

    【解决方案2】:

    请注意,Boost.Signals2 取代了 Boost.Signals。它具有更加灵活和强大的tracking mechanism

    尽管该库旨在为多线程程序提供线程安全的解决方案,但可以通过将 boost::signals2::dummy_mutex 设置为信号的内部互斥体来避免 single-threaded environment 中的锁定开销。

    【讨论】:

      猜你喜欢
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多