Heim > Backend-Entwicklung > C++ > Wie erreicht man eine ordnungsgemäße Speicherverwaltung bei der C-Singleton-Implementierung?

Wie erreicht man eine ordnungsgemäße Speicherverwaltung bei der C-Singleton-Implementierung?

Barbara Streisand
Freigeben: 2024-11-03 17:16:03
Original
1058 Leute haben es durchsucht

How to Achieve Proper Memory Management in C   Singleton Implementation?

Singleton-Muster in C mit ordnungsgemäßer Speicherverwaltung

Das Singleton-Muster stellt sicher, dass nur eine Instanz einer Klasse erstellt werden kann. Obwohl es viele Ansätze gibt, besteht eine gängige Praxis darin, einen statischen Zeiger zu verwenden, um die Instanzerstellung und -zerstörung zu verwalten. Es ist jedoch wichtig, die Speicherverwaltungsregeln einzuhalten, um Fehler zu vermeiden.

In diesem Beispiel:

<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>
Nach dem Login kopieren

Das manuelle Freigeben eines Singletons mithilfe des Destruktors ist falsch. Wenn externe Verweise auf die Instanz vorhanden sind, führt ein vorzeitiges Löschen zu Abstürzen.

Wählen Sie stattdessen einen besseren Ansatz:

<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>
Nach dem Login kopieren

Hier wird die statische Instanz automatisch erstellt und zerstört Compiler, der eine ordnungsgemäße Speicherverwaltung gewährleistet. Markieren Sie außerdem den Konstruktor als explizit, um implizite Typkonvertierungen zu verhindern, und machen Sie den Kopierkonstruktor und den Zuweisungsoperator privat, um unerwünschte Objektduplizierungen zu verhindern.

Das obige ist der detaillierte Inhalt vonWie erreicht man eine ordnungsgemäße Speicherverwaltung bei der C-Singleton-Implementierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage