これは奇妙に思えるかもしれませんが、私はそれを合理化しようとします。私は現在、 shared_ptrと組み合わせてboost.object_poolを広範囲に使用していますが、最近、本格的な再生/ロールバック/早送りなどの機能を作成するために、現在のプログラム状態のスナップショットを撮る必要がある状況に遭遇しました。
したがって、他の場所で使用するためにオブジェクトプールのクローンを作成しようとはしていません。これは、boost.poolのインターフェイス(私は許可されていません)によって許可されている場合でも、チャンクを指す有効なポインターがないため、明らかに機能しません。その新しく複製されたプールで、それは無意味でしょう。ただし、ここでの私の使用例は、再生/ロールバックが必要な場合に、元のプールに「貼り付け」たいというものです。
私は確かに、すべての状態、オブジェクト、サブ状態、サブオブジェクト、サブサブを手動でコピーして複製し、それらをスナップショットにパックして、すべてがうまくいくことを願っていますが、複雑さを考えるとエラーが発生しやすいですプロジェクトはすでに完了しており、メモリを直接コピーできる場合よりもはるかに遅くなる必要があります。コマンドパターン(または同様のもの)を使用して元に戻るを達成することも、元に戻るメカニズムが私の意図ではないため、かなり問題外です。
ダイハードの従来のCの方法を使用してプロジェクトを最初からやり直すかどうか疑問に思っていました。単純なmemcpy(snapshot、all_states、size)呼び出しで、ほとんどすべての作業を実行できます。
私がまだ欠けている他のオプションはありますか?基盤となるメモリ領域のクローンを作成できるboost.object_poolのような実装はありますか?状況を考慮すると、boost.object_poolを侵入的にハッキングすることはもっともらしいオプションですか?