Rumah > Artikel > pembangunan bahagian belakang > Berikut ialah beberapa pilihan tajuk, dengan mengingati format soalan dan kaitan dengan kandungan: Pilihan 1 (Fokus pada masalah): * Mengapakah `delete buf` Tidak Betul Apabila Menggunakan Peletakan Baharu? Pilihan 2 (
Peletakan Baharu dan Padam: Alokasi Memori yang Betul
Apabila memperuntukkan memori dengan kedua-dua operator "peletakan baharu" (sintaks (mem) baharu) dan operator baharu standard, adalah penting untuk menggunakan kaedah yang betul untuk melepaskan memori tersebut.
Pertimbangkan coretan kod berikut:
<code class="cpp">const char* charString = "Hello, World"; void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1); Buffer* buf = new(mem) Buffer(strlen(charString));</code>
Untuk mengagihkan memori yang diperuntukkan dengan betul, anda harus memanggil :
<code class="cpp">buf->~Buffer(); ::operator delete(mem);</code>
Ini kerana:
Pendekatan Salah:
Pendekatan 1:
<code class="cpp">delete (char*)buf;</code>
Pendekatan ini tidak betul kerana ia cuba memadamkan penimbal seolah-olah ia adalah penunjuk char*. Walau bagaimanapun, memori telah diperuntukkan dengan peletakan baharu, jadi anda mesti menggunakan pemadaman operator sebaliknya.
Pendekatan 2:
<code class="cpp">delete buf;</code>
Pendekatan ini juga tidak betul kerana ia gagal untuk memanggil pemusnah objek Penampan secara manual. Akibatnya, sebarang sumber yang diperoleh oleh objek mungkin tidak dikeluarkan, yang berpotensi membawa kepada kebocoran memori atau isu lain.
Atas ialah kandungan terperinci Berikut ialah beberapa pilihan tajuk, dengan mengingati format soalan dan kaitan dengan kandungan: Pilihan 1 (Fokus pada masalah): * Mengapakah `delete buf` Tidak Betul Apabila Menggunakan Peletakan Baharu? Pilihan 2 (. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!