Maison > développement back-end > C++ > le corps du texte

Pourquoi le retour d'une référence est-il préférable pour l'implémentation de C Singleton ?

Barbara Streisand
Libérer: 2024-11-03 21:50:30
original
1003 Les gens l'ont consulté

Why is Returning a Reference Preferred for C   Singleton Implementation?

Exemple de Singleton en C

En C, le modèle Singleton garantit qu'une classe n'a qu'une seule instance tout au long de l'exécution du programme. Voici un exemple amélioré d'implémentation de Singleton :

<code class="cpp">class A {
private:
    static A* m_pA;
    explicit A(); // Constructor should be private
    A(const A&) = delete; // Prevent copying
    A& operator=(const A&) = delete; // Prevent assignment
    virtual ~A(); // Destructor

public:
    static A& GetInstance(); // Return a reference to the instance
    static void FreeInstance(); // Free the instance when no longer needed

    void WORK1();
    void WORK2();
    void WORK3();
};

A& A::GetInstance() {
    if (m_pA == nullptr) {
        static A instance; // Lazy initialization
        m_pA = &instance;
    }
    return *m_pA; // Return a reference to the instance
}

void A::FreeInstance() {
    delete m_pA;
    m_pA = nullptr;
}</code>
Copier après la connexion

Discussion :

Pourquoi éviter de renvoyer un pointeur ?

L’exemple de code fourni renvoie initialement un pointeur vers l’instance Singleton. Cependant, renvoyer une référence est considéré comme plus approprié pour les Singletons car cela empêche la désallocation manuelle de l'instance. La durée de vie de l'objet doit être gérée par la classe Singleton elle-même.

Initialisation paresseuse :

L'exemple amélioré utilise une variable statique initialisée par une méthode de fonction pour réaliser une initialisation paresseuse. Cette technique garantit que le Singleton est créé uniquement lorsqu'il est nécessaire, améliorant ainsi l'efficacité.

Destruction garantie :

En renvoyant une référence, le Singleton garantit que l'instance est pas détruit prématurément. Il s'occupe également de la destruction appropriée à la fin du programme, car la référence au Singleton est automatiquement libérée.

Notes supplémentaires :

  • Le constructeur doit être déclaré privé pour empêcher la création directe d'objets.
  • Le constructeur de copie et l'opérateur d'affectation doivent être supprimés explicitement pour appliquer une seule instance.
  • Le destructeur doit être virtuel pour permettre une destruction appropriée des classes dérivées si nécessaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!