Citat:
Goran Arandjelovic: Ne mora sve podatke posebno... Ovo je validan kod i potpuno funkcionalan, zar ne? :)
Code:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class Klasa
{
public:
int x;
string s;
char n;
};
int main(int argc, char *argv[])
{
Klasa a;
Klasa p;
a.x = 5;
a.s = "Goranche";
a.n = 'N';
fstream file("out",ios::out|ios::binary);
file.write((char*)&a,sizeof(a));
file.close();
file.open("out",ios::in|ios::binary);
file.read((char*)&p,sizeof(p));
file.close();
cout << p.x;
cout << a.s;
cout << a.n;
}
Što će reći, možeš upisivati ceo objekat odjednom, ali pazi! Ali ćeš vratiti nazad samo one podatke koji su bili na steku.
[Ovu poruku je menjao Goran Arandjelovic dana 08.01.2006. u 19:46 GMT+1]
Niti je validan niti funkcionalan.
dodaj recimo izmedju write/a i read/a a.s.resize(100); ili a.s+="Tamara";
ili bilo sta sto ce naterati string da realocira i tvoj program onda ima
undefined behavior. Sto se tice steka, isto ti je, string alocira uvek
na heapu, osim ako nije SSO recimo flex_string al i on alocira
na heapu preko 16 karaktera:)
Write cele strukture je garantovan da radi samo ako struktura
sadrzi POD-ove i nista drugo, sto ce reci, ako tvoj string ima pokazivac,
kao sto ima, to ne radi jer sadrzaj stringa nece biti snimljen
nego pointer.
Pozdrav!