我有一个日志系统,可以收集不同队列中的消息。此外,系统接受系统调用以编写消息(侦听器=消费者)的侦听器(对侦听器的引用)。另请注意,整个日志系统是单例。
我的问题是析构函数。您可以将消息发送到不同的队列,并且您可以允许侦听器侦听多个队列,因此每个消息队列都可以有一个侦听器列表。当调用析构函数时,如果将侦听器添加到两个或多个队列中,析构函数会尝试删除同一个侦听器2次(或更多次)。
一个肮脏的解决方案是不要删除监听器(有少数几个并且是单例,所以泄漏很少,但我不喜欢)。 另一种解决方案是维护另一个结构来保存所有侦听器,并从队列中删除指向该结构的指针。但是没有什么能让我觉得两个不同的指针指向同一个听众,问题也是一样的。
我想我需要一个不同的解决方案。一些想法?
感谢!!!!
答案 0 :(得分:1)
为什么不使用shared_pointers
?它们伴随着 Boost库(我不知道它们是否包含在最新的C ++标准中)并且看起来它们正是您所需要的。
shared_ptr类模板存储指向动态分配对象的指针,通常使用C ++ new-expression。当指向它的最后一个shared_ptr被销毁或重置时,保证删除指向的对象。
有关更多信息,请参阅http://www.boost.org/doc/libs/1_48_0/libs/smart_ptr/shared_ptr.htm。