gpt4 book ai didi

c++ - 使用预先填充的对象映射实现工厂模式

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

我有一个将字符串 ID 映射到 base_object 的特定实现的映射。任何 base_object 都有一个方法 get_id 返回对象的 id。然后我使用(伪)填充 map

void addToMap(base_object* obj){
make_pair(obj->get_id(),obj);
}

这个 map 就像一个工厂,知道使用 id 返回正确的对象。这是检索特定对象的方法声明:

base_object* get(string id);

所有对象都没有字段,只有一个多态方法,每个实现都有不同的行为。

我不确定实现这个的最佳方法是什么。

map 应该是<string,unique_ptr<base_object>>的 map 吗?在这种情况下,当我使用 get 返回一个 base_object 时,可以返回一个指向 base_object 的原始指针吗? (我知道 map 会继续存在,这样物体就不会被破坏?)或者在这种情况下我应该使用 shared_ptr?此外,由于该对象实际上没有任何字段,也许返回该对象的拷贝会更好?

无论从哪个角度看,这都像是一个糟糕的设计,我无法决定解决这个问题的最佳方法是什么。我对 cpp 很陌生,所以我不太熟悉指针的所有差异和最佳用法...

最佳答案

使用 unique_ptr<base_object> const & .这向调用者发出信号,表明它获得的是具有请求的 id 的唯一对象的句柄。使用 shared_ptr表明它可能负责使对象保持事件状态。

另外,不需要 map : 你可以使用 setunordered_set基于 id 的命令/散列。这样,您就不必将 ID 存储两次。

(你正在实现的东西更像是一个对象池而不是一个工厂。)

关于c++ - 使用预先填充的对象映射实现工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23516539/

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