Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencapai Pengurusan Memori yang Betul dalam Pelaksanaan C Singleton?
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& a); void A(A &a); const A& operator=(const A& 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 = &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!