に格納されているデータ バッファーがありshared_ptr<void>
ます。
このバッファはいくつかのカプセル化されたレイヤーで構成されているため、最終的には次のようになります。
-----------------------------------...
- Header 1 | Header 2 | Data
-----------------------------------...
(実際には、レイヤーを次々にカプセル化解除するイーサネットパケットです)。
ヘッダー 1 を読み取ったら、残りのパケットを読み取りのために次のレイヤーに渡したいので、へのポインターを作成したいと思います。
-----------------------...
- Header 2 | Data
-----------------------...
ポインタ演算の問題になるだけなので、生のポインタを使用すると非常に簡単になります。しかし、 shared_ptr でそれを達成するにはどうすればよいですか? (私はboost::shared_ptrを使用しています):
- 「最初のshared_ptr.get()+オフセット」に新しいshared_ptrを作成することはできません。所有権を取得するのは意味がないためです
Header 2 + Data
(削除すると最終的にクラッシュします) - ばかげているので、データをコピーしたくありません
- バッファ全体の所有権を2 つのオブジェクト間で共有する必要があります (つまり、親オブジェクトまたはヘッダー 2 のみを必要とするオブジェクトがデータを必要とする限り、データを削除しないでください)。
それを次のような構造にまとめることができますboost::tuple<shared_ptr<void>, int /*offset*/, int /*length*/>
が、その結果を達成するためのより便利でエレガントな方法があるのではないかと思います。
ありがとう、