これは奇妙に思えるかもしれませんが、私はそれを合理化しようとします。私は現在をboost.object_poolと広範囲にshared_ptrと一緒に使用していますが、最近フルスピードのような機能を実現するために、現在のプログラム状態のスナップショットを取る必要があります。リプレイ/ロールバック/早送り。CまたはC++でクローン可能なオブジェクトプールを実装していますか?
他の場所で使用するオブジェクトプールを複製しようとしているわけではありませんが、明らかに動作しません。boost.poolのインタフェース(私はそうではありません)によって許可されていても、その新しくクローンされたプール内のチャンクを指し示すポインタとそれはちょうど意味がありません。しかし、ここでの私のユースケースは、リプレイ/ロールバックが必要な場合は、元のプールに戻って "paste"にしたいと思っています。
すべての状態、オブジェクト、サブ状態、サブオブジェクト、サブサブク...を手動でコピーしてスナップショットにパックして、すべてが正しくなることを願っていますが、プロジェクトがすでに持っている複雑さを考えれば、メモリを直接コピーするだけの場合よりもはるかに遅くなるはずです。アンドゥとリドゥを達成するためにコマンドパターン(または同様のもの)を使用することは、元に戻すやり直しの仕組みが私の意図ではないので、同様に疑問から外れています。
私はちょうどdie-hard伝統的なCの方法を使ってプロジェクトを最初からやっているのだろうと思っていました。単純なmemcpy(snapshot、all_states、size)コールはほぼすべての作業を行います。
まだ他にもオプションがありますか?基礎となるメモリ領域を複製するためのboost.object_pool実装がありますか?状況を考慮して、侵略的にboost.object_poolを妥当な方法でハッキングしていますか?
類似したインターフェイスを持つ、コピー可能なオブジェクトプールを作成することは、難しく、時間がかかるようには見えません。 – Pubby
@Pubby:グラフのような構造は決して簡単に複製できません。最も一般的な間違いは、無限のサイクルで立ち往生し、意図せずグラフを破っていることです。デバッグするのも面倒です。 –