问题:
我使用二进制模式将对象写入文件std::fstream
。但是,当我从该文件将其读回另一个对象,然后调用该新对象的其中一个虚拟成员函数时,会出现内存访问冲突错误。
代码如下所示:
class A
{
public:
// data
virtual void foo() = 0;
};
class B: public A
{
public:
// added data
virtual void foo() { ... }
}
int main()
{
// ...
A* a = new B();
A* b = new B();
file.write((char*)a, sizeof(B));
// ...
thatSameFile.read((char*)b, sizeof(B));
b->foo(); // error here
}
我发现了什么:
经过几个小时的调试,我看到__vfptr
成员b
(据我所知,它是指向该对象的虚拟表的指针)在文件读取语句之后发生了变化。我想我不仅将数据写入a
到文件并将它们复制到,我还复制了到b
的虚拟表指针。a
b
我说的对吗?我该如何解决这个问题?