gpt4 book ai didi

c++ - std::map 中的对象指针在通过 getter 检索时损坏

转载 作者:行者123 更新时间:2023-11-28 05:35:22 24 4
gpt4 key购买 nike

我有一个对象指针的 std::map:std::map<ConnectionID, IConnection *>

它只会包含三个条目,每个条目都来自 IConnection * ,所以我制作了三个方便的 getter 来检索每个对象,它们会转换为 IConnection *。进入正确的对象并返回它。它看起来像这样:

GameConnection * Client::GetGameConnection()
{
GameConnection * pGameConn = NULL;
if ((pGameConn = (GameConnection *)GetConnection(ConnectionID::GAME_CONNECTION)))
return pGameConn;

return nullptr;
}

通用 GetConnection()方法看起来像:

IConnection * Client::GetConnection(ConnectionID nConnID)
{
auto result = m_connections.find(nConnID);

if (result != m_connections.end())
{
return result->second;
}

return nullptr;
}

相当确定GetGameConnection如果我检索整个 map 并执行以下操作,问题就来了:

std::map<ConnectionID, IConnection *> connections = pClient->GetConnections();
GameConnection * pGameConn = (GameConnection *)connections.at(ConnectionID::GAME_CONNECTION);

如果是转换为GameConnection *这会导致问题,如何避免这样做,并且仍然能够像 pClient->GetGameConnection()->FooBar(); 一样方便地调用 GameConnection ?来自 IConnection * 的铸件至 GameConnection *应该没问题,因为它源自该接口(interface)。

最佳答案

我宁愿推荐你使用

std::map<ConnectionID,std::shared_ptr<IConnection>> connections;

或至少

std::map<ConnectionID,std::weak_ptr<IConnection>> connections;

让您的生活更轻松。

关于c++ - std::map 中的对象指针在通过 getter 检索时损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38415000/

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