Heim >Backend-Entwicklung >C++ >Wie kann ich eine C-Klasse, die einen std::string enthält, sicher serialisieren und deserialisieren?
Serialisieren einer Klasse mit einem std::string
In C beinhaltet das Serialisieren von Objekten häufig die Umwandlung des Objekts in ein Zeichenarray (char* ) und in eine Datei schreiben. Dieser Ansatz funktioniert gut für einfache Datentypen wie Ganzzahlen, es treten jedoch Probleme beim Umgang mit dynamischen Datenstrukturen wie std::string auf.
Wenn das serialisierte Objekt deserialisiert wird, kann der darin enthaltene std::string auf verweisen Speicher, der nicht mehr vorhanden ist, was zu einem Fehler „Adresse außerhalb der Grenzen“ führt.
Um dieses Problem zu beheben, besteht eine Standardlösung darin, benutzerdefinierte Serialisierungs- und Deserialisierungsmethoden innerhalb der Klasse zu implementieren sich selbst. Diese Methoden können die Größe und Zeichen des std::string manuell serialisieren und deserialisieren.
Implementierung:
class MyClass { int height; int width; std::string name; public: std::ostream& operator<<(std::ostream& out) const { out << height << ',' << width << ',' << name.size() << ',' << name; return out; } std::istream& operator>>(std::istream& in) { int len = 0; char comma; in >> height >> comma >> width >> comma >> len >> comma; if (len) { std::vector<char> tmp(len); in.read(tmp.data(), len); name.assign(tmp.data(), len); } return in; } };
Verwendung:
MyClass obj; obj.height = 10; obj.width = 15; obj.name = "MyClass"; // Serialize to file std::ofstream outfile("myclass.dat"); outfile << obj; outfile.close(); // Deserialize from file std::ifstream infile("myclass.dat"); infile >> obj; infile.close();
Dieser benutzerdefinierte Ansatz stellt sicher, dass der std::string korrekt serialisiert und deserialisiert wird. Darüber hinaus bietet es eine praktische Möglichkeit, Objekte mithilfe der Stream-Operatoren (<< und >>) zu serialisieren und zu deserialisieren.
Das obige ist der detaillierte Inhalt vonWie kann ich eine C-Klasse, die einen std::string enthält, sicher serialisieren und deserialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!