gpt4 book ai didi

c++ - 在智能指针中安全地包含任意数据

转载 作者:行者123 更新时间:2023-11-30 00:58:49 30 4
gpt4 key购买 nike

首先:我搜索了一半的网络以找到 this 的答案。作为最接近的解决方案。然而,它对我来说太重了,所以我看起来不那么复杂。

然后,一些上下文:我正在构建一个系统,它应该能够处理来自队列的传入消息,然后将这些消息的结果存储在另一个队列中。我想将这些响应存储在通用类中,因为我将其存储在 multimap 中。

目前响应类定义如下

class COutboundMsg  
{
public:
enum eTypeHint {
thNone,
thSomeType,
thLast
};

eTypeHint m_TypeHint;

void* m_OutboundData;

COutboundMsg(COutboundMsg::eTypeHint TypeHint, void* data);
};

COutboundMsg::COutboundMsg(COutboundMsg::eTypeHint TypeHint, void* data) :
m_TypeHint(TypeHint),
m_OutboundData(data)
{
}

现在,当前的工作方式需要用户执行如下操作:

CSomeType* data = new CSomeType();  
COutboundMsg(COutboundMsg::thSomeType , (void*) data);

将由另一端的用户将 void* 转换回 CSomeType*(使用类型提示)并删除它。

不喜欢。

我宁愿将 m_OutboundData 包含在 auto_ptr 或其他东西中,并确保它在完成后自行删除。

有什么想法吗?也许完全不同的方法

最佳答案

通常多态性用于这样的系统;任何可以放入出站队列的项目都来自 QueueItem队列包含 QueueItem*或指向 QueueItem 的智能指针.

由于这些项目都来自一个共同的基础,您可以安全地删除 QueueItem*或者允许智能指针来处理它。这种方法还允许您使用 dynamic_cast确保指针实际上指向您认为的类型的对象。

如果这种方法可行,请务必制作 QueueItem destructor virtual,否则不会调用派生类的析构函数。

关于c++ - 在智能指针中安全地包含任意数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512254/

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