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
Mary-Kate Olsenasal
2024-12-19 10:26:13326semak imbas

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());

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());
}

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!

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