如何读写shared_ptr?

时间:2013-08-20 02:12:16

标签: c++ shared-ptr

当我的数据使用由多个条目共享的shared_ptr时,是否有任何读取和写入数据以显示共享的好方法?例如

我有一个数据结构

struct Data
{
    int a;
    int b;
};

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

我可以在像data.txt这样的文件中将其写出来

2 2

并阅读该文件,我可以获得值为dataa = 2的{​​{1}}。但是,如果数据使用share_ptr,则变得困难。例如,

b = 2

数据可以

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

Data data;

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

2例不同。如何将数据写入data.a.reset(new int(2)); data.b.reset(new int(2)); 文件,然后将文件读取到数据中,我可以获得具有data.txta相同关系的相同数据?

1 个答案:

答案 0 :(得分:1)

这是一种数据序列化问题。在这里,您希望序列化其中包含指针类型的Data。序列化指针值时,它们指向的数据会写入某处,指针会转换为带有数据的文件的偏移量。

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

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

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

我将在练习中留下检测和处理不同Data个实例之间发生的共享的问题。