Malloc dan Pembina: Memahami Perbezaan
Tidak seperti pengendali baharu dan padam, yang secara automatik memanggil pembina dan pemusnah, std::malloc () fungsi hanya memperuntukkan memori. Ini menimbulkan persoalan: bagaimana kita boleh mencipta objek menggunakan std::malloc() sambil memastikan bahawa pembinanya dipanggil?
Penyelesaian yang paling mudah ialah menggunakan operator baharu, kerana ia direka khusus untuk objek instansiasi. Walau bagaimanapun, terdapat kes di mana kami mungkin lebih suka menggunakan std::malloc() secara langsung. Dalam situasi sedemikian, kita boleh memanggil pembina secara eksplisit menggunakan teknik yang dikenali sebagai "peletakan baharu."
Peletakan Baharu untuk Invokasi Pembina Eksplisit
Peletakan baharu membolehkan kami membuat instantiat objek dalam ingatan yang telah kita peruntukkan sendiri menggunakan std::malloc(). Sintaks untuk penempatan baharu adalah seperti berikut:
<code class="cpp">new (address) Type();</code>
di mana alamat ialah alamat memori di mana objek harus dibuat dan Jenis ialah jenis objek.
Contoh Penggunaan Peletakan Baharu
Pertimbangkan kod berikut:
<code class="cpp">A* a = (A*)malloc(sizeof(A)); new (a) A(); a->~A(); free(a);</code>
Di sini, kita mula-mula memperuntukkan memori untuk objek jenis A menggunakan std::malloc(). Kami kemudian secara eksplisit memanggil pembina A menggunakan penempatan baru. Penunjuk a kini menunjuk ke objek A yang dibina sepenuhnya.
Selepas objek tidak lagi diperlukan, kami memanggil pemusnahnya secara manual menggunakan sintaks a->~A(). Akhirnya, kami melepaskan memori yang diperuntukkan menggunakan percuma().
Kesimpulan
Sementara baharu dan padam kekal sebagai pengendali pilihan untuk penciptaan dan pemusnahan objek, memahami cara menggunakan std ::malloc() bersempena dengan penempatan baru memberi kami kawalan yang lebih besar ke atas pengurusan memori dan membolehkan kami mengendalikan senario tertentu di mana permohonan pembina yang jelas diperlukan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membina Objek Menggunakan `std::malloc()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!