首先,我的实际问题
我在地图中有一个共享指针,当地图本身中除了共享指针之外没有其他引用时,我想从地图中删除该共享指针,因此目标被释放。我怎样才能做到这一点?或者,有什么更好的设计来解决我的问题?
背景如下:
出于怀旧,我一直在使用 MySQL 后端用 C++ 编写 MUD 引擎。我现在正处于持久实体的阶段(在这种情况下,例如帐户、角色等)。我在找出实现这一点的最佳方法时遇到了一些麻烦,因此决定寻求一些建议。
我目前的持久化架构是这样的,以字符为例
字符实体 -> 字符存储 -> 字符持久化 -> MySQL
角色实体是指角色本身,类似于MVC中的模型。它除了数据之外什么都没有,只知道其他实体。
字符存储是当前负责在内存中保存字符实体实例的容器。当请求通过 ID 或名称查找字符时,它会检查其内存,实现为包含 UUID 的 std::string 到 std::shared_ptr 的映射。如果我们有一个实例已经在内存中,我们传回一个共享指针,如果没有,我们向持久层请求它,将它存储在映射中,然后将一个共享指针传回给它。
持久层是抽象的,有一个 character_persistence 接口,它有一个 mysql_character_persistence 的具体实现,所以我可以很容易地切换到不同形式的持久性。