Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Menggunakan Malloc dengan std::strings dalam C Structures?

Mengapa Saya Tidak Boleh Menggunakan Malloc dengan std::strings dalam C Structures?

Linda Hamilton
Linda Hamiltonasal
2024-11-18 19:46:02960semak imbas

Why Can't I Use Malloc with std::strings in C   Structures?

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!

Kenyataan:
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