Maison > Article > développement back-end > Pourquoi le retour d'une référence est-il préférable pour l'implémentation de C Singleton ?
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>
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 :
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!