recherche

Maison  >  Questions et réponses  >  le corps du texte

C++保存对象的问题?

//这是测试用的类
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();
}
怪我咯怪我咯2803 Il y a quelques jours481

répondre à tous(4)je répondrai

  • 怪我咯

    怪我咯2017-04-17 13:18:00

    只有不带指针的POD可以把整个struct直接写进文件。这就是被垃圾教材坑了啊,当年我们的课本也一样。

    répondre
    0
  • PHPz

    PHPz2017-04-17 13:18:00

    因为string和vector包含指向堆区的指针。

    每次程序运行不一定分配到一个地方。你后面那次读到的是垃圾数据。

    你应该想办法保存它的实际数据,找个json库或者什么的。

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:18:00

    你保存的是对象的引用。栈上数据存了堆上数据没有存。
    string实现不同可能会导致类对象的大小不一致

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

    读出来可能是乱的

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-17 13:18:00

    保存基本数据类型没有问题,stringvector就不行了,要不你自己实现一个,像c那样

    répondre
    0
  • Annulerrépondre