Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencapai Pengurusan Memori yang Betul dalam Pelaksanaan C Singleton?

Bagaimana untuk Mencapai Pengurusan Memori yang Betul dalam Pelaksanaan C Singleton?

Barbara Streisand
Barbara Streisandasal
2024-11-03 17:16:031062semak imbas

How to Achieve Proper Memory Management in C   Singleton Implementation?

Corak Singleton dalam C dengan Pengurusan Memori yang Betul

Corak Singleton memastikan bahawa hanya satu tika kelas boleh dibuat. Walaupun banyak pendekatan wujud, amalan biasa ialah menggunakan penuding statik untuk mengurus penciptaan dan pemusnahan contoh. Walau bagaimanapun, adalah penting untuk mematuhi peraturan pengurusan memori untuk mengelakkan ralat.

Dalam contoh ini:

<code class="cpp">class A {
    static A* m_pA;
    A();
    ~A();
    static A* GetInstance();
    static void FreeInstance();
    void WORK1();
    void WORK2();
    void WORK3();
};

A* A::GetInstance() {
    if (m_pA == NULL)
        m_pA = new A();
    return m_pA;
}

A::~A() {
    FreeInstance()  // Don't write this here
}

void A::FreeInstance() {
    delete m_pA;
    m_pA = NULL;
}</code>

Membebaskan singleton secara manual menggunakan pemusnah adalah tidak betul. Jika rujukan luaran kepada contoh wujud, memadamkannya lebih awal akan menyebabkan ranap sistem.

Sebaliknya, gunakan pendekatan yang lebih baik:

<code class="cpp">class A {
    static A* m_pA;
    explicit A();
    void A(const A&amp; a);
    void A(A &amp;a);
    const A&amp; operator=(const A&amp; a);
    ~A();
    static A* GetInstance();
    static void FreeInstance();
    void WORK1();
    void WORK2();
    void WORK3();
};

A* A::GetInstance() {
    if (m_pA == NULL){
        static A self;
        m_pA = &amp;self;
    }
    return m_pA;
}

A::~A() {
}</code>

Di sini, tika statik dicipta dan dimusnahkan secara automatik oleh pengkompil, memastikan pengurusan memori yang betul. Selain itu, tandakan pembina sebagai eksplisit untuk mengelakkan penukaran jenis tersirat dan jadikan pembina salinan dan pengendali tugasan peribadi untuk melarang pertindihan objek yang tidak diingini.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Pengurusan Memori yang Betul dalam Pelaksanaan C Singleton?. 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