//这是测试用的类
class A {
public:
int _i;
string _str;
vector<int> _vec;
A(const int i = 0, const string str = "hi", vector<int> vec = { 0 })
:_a(i), _b(str), _vec(vec) {}
};
//这是第一次测试,输出是正确的
int main()
{
A a(1, "hello", { 1,2,3 });
ofstream out("test.txt", ios::binary);
out.write((char*)&a, sizeof(a));
out.close();
A b;
ifstream in("test.txt", ios::binary);
in.read((char*)&b, sizeof(b));
in.close();
cout << b._i << b._str << *b._vec.begin();
getchar();
}
//然后我把写入文件的部分注释掉了,程序就不能用了
int main()
{
/*A a(1, "hello", { 1,2,3 });
ofstream out("test.txt", ios::binary);
out.write((char*)&a, sizeof(a));
out.close();*/
A b;
ifstream in("test.txt", ios::binary);
in.read((char*)&b, sizeof(b));
in.close();
cout << b._i << b._str << *b._vec.begin();
getchar();
}
PHPz2017-04-17 13:18:00
因为string和vector包含指向堆区的指针。
每次程序运行不一定分配到一个地方。你后面那次读到的是垃圾数据。
你应该想办法保存它的实际数据,找个json库或者什么的。
伊谢尔伦2017-04-17 13:18:00
你保存的是对象的引用。栈上数据存了堆上数据没有存。
string实现不同可能会导致类对象的大小不一致
A b;
ifstream in("test.txt", ios::binary);
in.read((char*)&b, sizeof(b));
读出来可能是乱的