Menggunakan Malloc dan std::Strings dalam C Structures
Anda telah menghadapi isu biasa apabila cuba menggunakan struktur yang mengandungi std:: rentetan dengan peruntukan memori dinamik menggunakan malloc(). Isu ini berpunca daripada kerumitan pembinaan objek dan pengurusan memori dalam C .
Masalah dengan Malloc
Malloc memperuntukkan memori mentah, mewujudkan blok ruang yang tidak diinisialisasi. Walau bagaimanapun, menggunakan malloc untuk objek dengan pembina bukan remeh, seperti std::string, adalah bermasalah kerana ia tidak memanggil pembina untuk memulakan objek dengan betul.
Menggunakan Baharu Daripada Malloc
Penyelesaiannya ialah menggunakan operator C baharu dan bukannya malloc. Baharu mencipta objek baharu dan memanggil pembinanya, memastikan permulaan yang betul. Dalam kes anda, anda boleh menggunakan:
example *ex = new example;
Menggunakan Peletakan Baharu untuk Memori Mentah
Jika anda secara khusus perlu menggunakan malloc, anda boleh memperuntukkan memori mentah dengan malloc dan kemudian gunakan peletakan baharu untuk membina objek dalam ingatan itu:
void *ex_raw = malloc(sizeof(example)); example *ex = new(ex_raw) example;
Walau bagaimanapun, menggunakan baharu secara langsung ialah kaedah pilihan dalam senario ini.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Malloc dengan std::strings dalam C Structures?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!