0

多数のエントリで共有されているデータを使用する場合、shared_ptr共有を示すためにデータを読み書きする良い方法はありますか? 例えば

私はデータ構造を持っています

struct Data
{
    int a;
    int b;
};

Data data;
data.a = 2;
data.b = 2;

data.txt次のようなファイルに書き出すことができます

2 2

ファイルを読み取ると、dataa = 2とを取得できますb = 2。ただし、データが share_ptr を使用している場合は、それが難しくなります。例えば、

struct Data
{
    shared_ptr<int> a;
    shared_ptr<int> b;
};

Data data;

データは

data.a.reset(new int(2));
data.b = data.a;

また

data.a.reset(new int(2));
data.b.reset(new int(2));

2つのケースは異なります。データをファイルに書き込んでから、data.txtファイルをデータに読み込む方法、 と の同じ関係で同じデータを取得できますab?

4

1 に答える 1

1

これは一種のデータシリアライゼーションの問題です。Dataここでは、ポインター型を含むをシリアライズしたいと考えています。ポインター値をシリアル化すると、それらが指しているデータがどこかに書き込まれ、ポインターはデータを含むファイルへのオフセットに変換されます。

あなたの場合、int値はオブジェクトの直後に書き出されると考えることができ、「ポインター」値はオブジェクトの後のバイト数で表されます。したがって、ファイル内の各Dataファイルは次のようになります。

|total-bytes-of-data|
|offset-a|
|offset-b|
|value[]|

abが同じインスタンスを指している場合、それらは同じオフセットになります。abが異なるインスタンスを指している場合、それらのオフセットは異なります。

Data異なるインスタンス間で発生する共有の検出と処理の問題は演習として残します。

于 2013-08-20T02:50:49.683 に答える