Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh mencipta objek menggunakan malloc dan memastikan penyerahan pembina?

Bagaimanakah saya boleh mencipta objek menggunakan malloc dan memastikan penyerahan pembina?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 16:04:02206semak imbas

 How can I create an object using malloc and ensure constructor invocation?

Invokasi Pembina dengan Malloc: Berbeza dengan Baharu dan Padam

Berbeza dengan ungkapan baharu dan padam yang ada di mana-mana, std::malloc membentangkan gelagat unik: ia memang tidak secara automatik memanggil pembina objek semasa peruntukan memori. Ini menimbulkan persoalan: bagaimanakah kita boleh mencipta objek menggunakan malloc sambil memastikan invokasi pembina?

Jawapan:

Pendekatan yang disyorkan dan intuitif ialah menggunakan operator baharu, yang sememangnya mengendalikan kedua-dua peruntukan memori dan seruan pembina. Sebagai alternatif, kita boleh memanggil pembina secara manual melalui "peletakan baharu", teknik yang menggunakan panggilan pembina eksplisit.

Pengendalian Tersuai melalui Peletakan Baharu

Coretan kod berikut menggambarkan penggunaan peletakan baharu:

<code class="cpp">A* a = (A*)malloc(sizeof(A));
new (a) A();</code>

Di sini, penuding a menunjukkan memori yang diperuntukkan bersaiz saiz(A), dan peletakan ungkapan baharu (a) A() kemudiannya membina objek A di lokasi ingatan itu.

Apabila objek tidak lagi diperlukan, kami memanggil pemusnah secara manual dan membebaskan memori yang diperuntukkan:

<code class="cpp">a->~A();
free(a);</code>

Adalah penting untuk ambil perhatian bahawa peletakan baharu biasanya tidak digunakan melainkan terdapat keadaan khusus yang melarang penggunaan baharu dan padam.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mencipta objek menggunakan malloc dan memastikan penyerahan pembina?. 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