我序列化了一个C++对象,如何在不知道它是什么类型的情况下为它分配内存?

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不同,语言或标准库中没有内置机制.