gpt4 book ai didi

c++ - 需要一些想法来销毁 N :M relation

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:06 27 4
gpt4 key购买 nike

我有一个日志系统,用于收集不同队列中的消息。此外,系统接受系统调用以写入消息(监听器 = 消费者)的监听器(对监听器的引用)。另外,请注意整个日志系统是一个单例。

我的问题是析构函数。您可以将消息发送到不同的队列,并且可以指定一个监听器来监听多个队列,因此每个消息队列都可以有一个监听器列表。调用析构函数时,如果一个监听器被添加到两个或多个队列,析构函数会尝试删除同一个监听器 2 次(或更多次)。

一个肮脏的解决方案是不删除监听器(很少而且是单例,所以泄漏很少,但我不喜欢)。另一种解决方案是维护另一个结构来保存所有监听器,并从该结构而不是从队列中删除指针。但是没有什么可以让我认为两个不同的指针指向同一个监听器并且问题是相同的。

我想我需要一个不同的解决方案。一些想法?

谢谢!!!!

最佳答案

为什么不直接使用 shared_pointers?它们与 Boost 库(我不知道它们是否包含在最新的 C++ 标准中)一起出现,看起来它们正是您所需要的。

The shared_ptr class template stores a pointer to a dynamically allocated object, typically with a C++ new-expression. The object pointed to is guaranteed to be deleted when the last shared_ptr pointing to it is destroyed or reset.

参见 http://www.boost.org/doc/libs/1_48_0/libs/smart_ptr/shared_ptr.htm了解更多信息。

关于c++ - 需要一些想法来销毁 N :M relation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8983828/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com