Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mensiri dan Menyahseri Kelas C yang Mengandungi std::string dengan selamat?
Mensiri Kelas dengan std::string
Dalam C , mensiri objek selalunya melibatkan penghantaran objek ke tatasusunan aksara (char* ) dan menulisnya ke fail. Pendekatan ini berfungsi dengan baik untuk jenis data mudah seperti integer, tetapi isu timbul apabila berurusan dengan struktur data dinamik seperti std::string.
Apabila objek bersiri dinyahsiri, std::string yang terkandung di dalamnya mungkin menunjuk ke memori yang tidak wujud lagi, yang membawa kepada ralat "alamat di luar sempadan".
Untuk menangani isu ini, penyelesaian standard adalah dengan laksanakan kaedah bersiri tersuai dan penyahsirilan dalam kelas itu sendiri. Kaedah ini boleh mensiri dan menyahsiri saiz dan aksara std::string secara manual.
Pelaksanaan:
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; } };
Penggunaan:
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();
Pendekatan tersuai ini memastikan bahawa std::string disiri dengan betul dan desirialisasi. Selain itu, ia menyediakan cara mudah untuk mensiri dan menyahsiri objek menggunakan pengendali strim (<< dan >>).
Atas ialah kandungan terperinci Bagaimana untuk Mensiri dan Menyahseri Kelas C yang Mengandungi std::string dengan selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!