0

当我的数据shared_ptr由多个条目共享使用时,有什么好的方法可以读写数据来显示共享?例如

我有一个数据结构

struct Data
{
    int a;
    int b;
};

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

我可以把它写在像这样的文件data.txt

2 2

并读取文件,我可以获得data带有值a = 2b = 2. 但是,如果 Data 使用 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文件然后将文件读取到数据,我可以获得具有相同关系的相同a数据b

4

1 回答 1

1

这是一种数据序列化问题。在这里,您想要序列化您的Datathat 在其中具有指针类型。当您序列化指针值时,它们指向的数据被写入某处,并且指针被转换为带有数据的文件的偏移量。

在您的情况下,您可以将int值视为在对象之后立即写出,并且“指针”值由对象之后的字节数表示。因此,Data文件中的每个都可能如下所示:

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

如果ab指向同一个实例,它们将具有相同的偏移量。如果ab指向不同的实例,它们将具有不同的偏移量。

我将把检测和处理不同Data实例之间发生的共享问题作为练习。

于 2013-08-20T02:50:49.683 回答