当我的数据使用由多个条目共享的shared_ptr
时,是否有任何读取和写入数据以显示共享的好方法?例如
我有一个数据结构
struct Data
{
int a;
int b;
};
Data data;
data.a = 2;
data.b = 2;
我可以在像data.txt
这样的文件中将其写出来
2 2
并阅读该文件,我可以获得值为data
和a = 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.txt
和a
相同关系的相同数据?
答案 0 :(得分:1)
这是一种数据序列化问题。在这里,您希望序列化其中包含指针类型的Data
。序列化指针值时,它们指向的数据会写入某处,指针会转换为带有数据的文件的偏移量。
在您的情况下,您可以将int
值视为在对象之后立即写出,而“指针”值由对象之后的字节数表示。因此,您文件中的每个Data
都可能如下所示:
|total-bytes-of-data|
|offset-a|
|offset-b|
|value[]|
如果a
和b
指向同一个实例,它们将具有相同的偏移量。如果a
和b
指向不同的实例,则会有不同的偏移量。
我将在练习中留下检测和处理不同Data
个实例之间发生的共享的问题。