Bagaimana untuk Memadamkan Memori yang Diperuntukkan dengan \'peletakan baharu\' dalam C ?

Barbara Streisand
Lepaskan: 2024-11-01 09:24:30
asal
869 orang telah melayarinya

 How to Properly Delete Memory Allocated with

Pengurusan Memori dengan "peletakan baharu" dan "padam"

Dalam C , peruntukan dan pemadaman memori memainkan peranan penting dalam mengurus memori dinamik. Walaupun pengendali "baru" dan "padam" standard biasanya digunakan, "peletakan baharu" dan "padam" menyediakan pendekatan khusus untuk memperuntukkan dan memadamkan memori.

Menggunakan "peletakan baharu"

Contoh coretan kod yang dibentangkan menimbulkan persoalan tentang kaedah yang betul untuk memadamkan memori yang diperuntukkan menggunakan "peletakan baharu." Dalam kod, memori diperuntukkan dengan baris:

void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
Salin selepas log masuk

dan kemudian objek "Penimbal" diletakkan di lokasi ingatan ini menggunakan "peletakan baharu":

Buffer* buf = new(mem) Buffer(strlen(charString));
Salin selepas log masuk

Penyediaan Memori Pilihan

Timbul persoalan sama ada hendak memadamkan memori menggunakan:

delete (char*)buf;
Salin selepas log masuk

atau ringkasnya:

delete buf;
Salin selepas log masuk

Untuk memadamkan memori yang diperuntukkan dengan betul, adalah penting untuk mematuhi garis panduan khusus:

  1. Padam dengan operator yang sama digunakan untuk peruntukan: Anda mesti memadamkan memori yang diperuntukkan dengan operator "baru" menggunakan operator "padam". Memandangkan "peletakan baharu" telah digunakan, anda tidak boleh menghubungi terus operator padam pada penuding "Penimbal*".
  2. Panggil pemusnah secara manual: Memandangkan "peletakan baharu" memintas pembinaan objek biasa proses, pemusnah mesti dipanggil secara manual. Ini biasanya dilakukan dengan memanggil pemusnah secara terus:
buf->~Buffer();
Salin selepas log masuk
  1. Padam memori asas: Selepas memanggil pemusnah, anda boleh memadamkan memori asas yang diperuntukkan oleh " ::operator new":
::operator delete(mem);
Salin selepas log masuk

Deallocation Betul:

Kaedah yang betul untuk memadamkan memori yang diperuntukkan adalah seperti berikut:

buf->~Buffer();
::operator delete(mem);
Salin selepas log masuk

Dengan mengikut langkah-langkah ini, anda memastikan bahawa memori yang diperuntukkan dengan "peletakan baharu" diagihkan dengan betul, mengelakkan kemungkinan kebocoran memori.

Atas ialah kandungan terperinci Bagaimana untuk Memadamkan Memori yang Diperuntukkan dengan \'peletakan baharu\' dalam C ?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!