C++保存对象的问题?
怪我咯
怪我咯 2017-04-17 13:16:00
0
4
483
//这是测试用的类
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();
}
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(4)
刘奇

只有不含指標的POD可以把整個struct直接寫進檔案。這就是被垃圾教材坑了啊,當年我們的課本也一樣。

PHPzhong

因為string和vector包含指向堆區的指標。

每次程式運行不一定會分配到一個地方。你後面那次讀到的是垃圾資料。

你應該想辦法保存它的實際數據,找個json庫或什麼的。

伊谢尔伦

你儲存的是物件的參考。棧上資料存了堆上資料沒有存。
string實作不同可能會導致類別物件的大小不一致

A b;
ifstream in("test.txt", ios::binary);
in.read((char*)&b, sizeof(b));

唸出來可能是亂的

洪涛

保存基本資料型別沒有問題,stringvector就不行了,要不你自己實作一個,像c那樣

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板