Si je suivais la règle RAII et que je développerais une classe en C++, serait-il nécessaire d'avoir des constructeurs statiques? Est-ce que les constructeurs statiques vont m'aider d'une quelconque façon ou serait-ce une mauvaise action à faire?Est-il nécessaire d'avoir des constructeurs statiques quand on suit le "RAII" de faire les choses en C++?
Répondre
Je suppose que vous parlez d'une fonction d'usine statique qui crée une instance de votre classe (comme d'autres l'ont souligné). Dans ce cas, vous n'avez pas besoin d'utiliser le pattern RAII. Rappelez-vous que vous avez besoin que la classe soit affectée à la pile, de sorte que le constructeur soit appelé (automatiquement) et initialise diverses données. aussi, le destructor est appelé (automatiquement) lorsque la pile dévide et effectue d'autres opérations: telles que les ressources libérant ainsi etc ..
Si votre classe initialise ses données de manière statique alors le modèle RAII échouera, car statiquement tenu les données ne sont pas liées à une instance d'une classe. Ainsi, lorsque la pile se déroule, il n'y a pas d'instance à détruire, aucun destructeur n'est appelé et le modèle RAII n'est pas implémenté.
Cela n'a aucun sens, vous ne pouvez pas avoir un constructeur statique. L'objectif entier du constructeur est d'initialiser une instance spécifique d'une classe; s'il était statique, il n'appartiendrait à aucune instance. RAII dit simplement que vous devez libérer une ressource dans le destructeur, et que l'acquisition de cette ressource se fait avec l'initialisation (construction) de l'objet qui exécutera ce destructeur. (Quel entails vous avez besoin d'un constructeur de copie fonctionnel ou interdit, avec un working assignment operator.)
Vous pourriez avoir une fonction statique CreateInstance()
qui vous renverrait l'instance de votre classe. Avec RAII, votre fonction devra probablement vous renvoyer un pointeur intelligent vers l'instance que vous avez créée pour éviter la copie de l'objet réel. Ensuite, vous stockez ce pointeur, copiez-le si vous en avez besoin à d'autres endroits. Lorsque tous les pointeurs intelligents sont détruits, l'objet sera également détruit. Si c'est ce que vous voulez, alors oui - vous pourriez avoir un "constructeur statique".
Bien sûr, ce n'est pas un must dans RAII et ne serait normalement qu'une complication inutile.
y at-il des constructeurs statiques en C++? – Vlad
il n'existe pas de constructeur statique en C++. Qu'est-ce que tu racontes? – Donotalo
Par constructeur statique, vous voulez dire que le vrai constructeur est privé et que les fonctions statiques créent des objets? –