Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengelakkan Kebocoran Memori Apabila Menggunakan Peruntukan Memori Dinamik dalam C?

Bagaimanakah Saya Boleh Mengelakkan Kebocoran Memori Apabila Menggunakan Peruntukan Memori Dinamik dalam C?

Mary-Kate Olsen
Lepaskan: 2024-12-19 10:26:13
asal
338 orang telah melayarinya

How Can I Avoid Memory Leaks When Using Dynamic Memory Allocation in C  ?

Kebocoran Memori dengan Peruntukan Memori Dinamik dalam C

Dalam C#, pengendali baharu memperuntukkan memori pada timbunan dan memulakannya dengan nilai lalai untuk jenis data. Walau bagaimanapun, dalam C , gelagat pengendali baharu berbeza dengan ketara.

Kod yang anda berikan menunjukkan kebocoran memori:

class A { ... };
struct B { ... };

A *object1 = new A();
B object2 = *(new B());
Salin selepas log masuk

Inilah sebabnya:

  • A *object1 = new A() memperuntukkan memori dalam timbunan dan memberikan penuding kepada object1.
  • B object2 = *(new B()) juga memperuntukkan memori dalam timbunan tetapi memberikan nilai objek kepada object2, bukan penunjuk kepada objek. Ini mengakibatkan salinan objek B dibuat dalam tempoh storan automatik (tindanan) manakala objek asal kekal dalam timbunan.

Untuk mengelakkan kebocoran memori, ikut garis panduan ini:

  • Memilih tempoh storan automatik dengan menggunakan T t; bukannya T() baharu.
  • Untuk tempoh storan dinamik, simpan penunjuk kepada objek yang diperuntukkan dalam objek tempoh storan automatik yang memadamkannya secara automatik:
template<typename T>
class automatic_pointer {
public:
    automatic_pointer(T* pointer) : pointer(pointer) {}
    ~automatic_pointer() { delete pointer; }
    T& operator*() const { return *pointer; }
    T* operator->() const { return pointer; }
private:
    T* pointer;
};

int main() {
    automatic_pointer<A> a(new A());
    automatic_pointer<B> b(new B());
}
Salin selepas log masuk

Dengan menggunakan teknik ini, anda boleh mengelakkan kebocoran memori dan memastikan pengurusan sumber yang betul dalam kod C.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Kebocoran Memori Apabila Menggunakan Peruntukan Memori Dinamik 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