我想用 C++ 序列化对象。一开始我尝试了一个简单的解决方案,我重载了类的<<
and>>
操作符进行序列化;这样我可以选择女巫属性序列化为一个字符串流,然后我可以稍后将相同的字符串流反序列化为另一个相同类型的对象的属性。这一直有效,直到我意识到如果要序列化的类包含指向其他类的指针,那么我也需要重载它们的>>
and<<
运算符。
所以我开始想,如果我让对象序列化并逐个字符地遍历它,然后将结果保存到字符串中会怎样。然后稍后获取该字符串并将其重新解释为原始类。这样我就可以序列化任何包含任何类型信息的类,而不用关心它包含什么,也不会重载任何运算符。
我实现了第二种方法,它看起来没问题,但是是吗?
#include <cstdlib>
#include <iostream>
#include <vector>
#include <stdlib.h>
using namespace std;
class B
{
public:
B(int one , int two)
{
this->one = one;
this->two = two;
}
int one;
int two;
};
class A
{
public:
A(int one , int two, B b)
{
this->one = one;
this->two = two;
classB= new B(b);
}
int one;
int two;
B* classB;
};
int main(int argc, char *argv[])
{
B b(3,4);
A* a = new A(1,2, b);
//Serializing 'a'
char v[sizeof(A)];
for (int i =0 ;i<sizeof(A);i++)
{
v[i] = (reinterpret_cast<char*>(a)[i]);
}
char* cp = (char*)malloc(sizeof(char) * sizeof(A));
for (int i =0 ;i<sizeof(A);i++)
{
cp[i] = v[i];
}
A* aa = reinterpret_cast<A*>(cp);
cout << aa->one << endl;
cout << aa->two<< endl;
cout << aa->classB->one<< endl;
free(cp);
system("PAUSE");
return EXIT_SUCCESS;
// OUTPUT is as expect:
1
2
3
}
所以你怎么看?您预见到第二种方法的任何并发症吗?请记住,我对 C++ 非常陌生,并且我正在尝试开发工作理论。