Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mensiri dan Menyahseri Kelas C yang Mengandungi std::string dengan selamat?

Bagaimana untuk Mensiri dan Menyahseri Kelas C yang Mengandungi std::string dengan selamat?

Linda Hamilton
Lepaskan: 2024-12-05 12:33:14
asal
917 orang telah melayarinya

How to Safely Serialize and Deserialize a C   Class Containing an std::string?

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;
    }
};
Salin selepas log masuk

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();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan