这可能看起来很奇怪,但我会尝试使其合理化。我目前将boost.object_pool与shared_ptr一起广泛使用,最近我遇到了一种情况,我需要对当前程序状态进行快照,以便实现像全面重放/回滚/快进这样的功能。
所以我不想克隆一个对象池以在其他地方使用,这显然不会起作用,因为即使我被 boost.pool 的接口(我不是)允许这样做,也不会有指向块的有效指针在那个新克隆的池中,这将毫无意义。但是我在这里的用例是如果有重播/回滚需求,我想将其“粘贴”回原始池中。
我当然可以手动复制和克隆所有状态、对象和子状态、子对象和子子...然后将它们打包到快照中,并希望一切顺利,但考虑到复杂性,这很容易出错项目已经搞定了,比直接复制内存要慢很多。使用命令模式(或类似模式)来实现撤消重做也是不可能的,因为撤消重做机制不是我的意图。
我只是想知道我是否使用顽固的传统 C 方式再次从头开始执行该项目,并且一个简单的 memcpy(snapshot, all_states, size) 调用几乎可以完成所有工作。
我还有其他选择吗?是否有任何类似 boost.object_pool 的实现允许您克隆底层内存区域?考虑到这种情况,侵入式破解 boost.object_pool 是一个合理的选择吗?