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

Patricia Arquette
Lepaskan: 2024-11-01 16:04:02
asal
197 orang telah melayarinya

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

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

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!

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