Neo*_*o_b 0 c++ serialization class object
我已经序列化了一个C++对象,我希望为它分配空间,虽然我不能使用"new"运算符,因为我不知道对象的类.我尝试使用malloc(sizeof(object)),虽然尝试将指针强制转换为序列化对象所属的类型,程序关闭.关于对象类的信息存储在哪里?
class object
{
public:
virtual void somefunc();
int someint;
};
class objectchild:public object
{
}
object *o=(object*)malloc(sizeof(objectchild));
cout << int(dynamic_cast<objectchild*>(o)) << endl;
Run Code Online (Sandbox Code Playgroud)
这会导致程序关闭.
先感谢您.
Ste*_*sop 11
我已经序列化了一个C++对象
我不确定你有没有.如果你写了这样的话:
object *p = new objectchild();
some_file.write((char*)p, sizeof(objectchild));
Run Code Online (Sandbox Code Playgroud)
那你还没有序列化你的对象.您已经将一些数据写入文件,并且(在大多数实现中)数据包含指向vtable和类型信息的指针.当您"反序列化"数据时,在另一台机器上或同一程序的另一次运行中,vtable通常不会位于同一地址,并且指针无效.
在C++中序列化对象的唯一方法是以您设计的已知格式编写其数据成员.该已知格式应包括足够的信息来计算对象的类型.有一些框架可以帮助您解决这个问题,但与Java不同,语言或标准库中没有内置机制.