Constructeur par défaut

Constructeur par défaut - C++ - Programmation

Marsh Posté le 22-05-2019 à 08:31:06    

Bonjour
 
Je m'attaque au C++ dans le contexte suivant :  
J'ai déjà fait pas mal de C il y a longtemps, plein de Java, un peu de Python.
J'en suis pour l'instant aux tutoriels de base et pour la partie objet.
J'ai pris Visual Studio comme environnement de dev parce qu'il est relativement bien intégré pour développer dans le moteur Unreal.
 
La question :  
Le constructeur par défaut, sans paramètre est obligatoire.
On peut bien sur le surcharger avec un constructeur avec paramètre.
Mais du coup, ce constructeur sans paramètre est accessible et utilisable même pour un l'objet qui a absolument besoin de parametre d'entrée.
 
Les bonnes manières pour gérer ça, c'est quoi ?  
Remonter une exception si on appelle le constructeur sans paramètre ?
Mettre le constructeur sans paramètre en private ?
Autre ?

Reply

Marsh Posté le 22-05-2019 à 08:31:06   

Reply

Marsh Posté le 25-05-2019 à 12:20:45    

Depuis C++ 11 tu peux utiliser le mot-clef : delete au constructeur par défaut que tu veux absolument pas implémenté voir : https://en.cppreference.com/w/cpp/l [...] onstructor
Avantt C++ 11 une astuce pour empêcher l'utilisation d'un constructeur par défaut était de le mettre en privé.
 
Le delete ayant l'avantage de donner une erreure de compil plus claire : "error: use of deleted function ‘A::A()’"

Reply

Marsh Posté le 25-05-2019 à 23:58:18    

chef_keeper a écrit :

Depuis C++ 11 tu peux utiliser le mot-clef : delete au constructeur par défaut que tu veux absolument pas implémenté voir : https://en.cppreference.com/w/cpp/l [...] onstructor
Avantt C++ 11 une astuce pour empêcher l'utilisation d'un constructeur par défaut était de le mettre en privé.
 
Le delete ayant l'avantage de donner une erreure de compil plus claire : "error: use of deleted function ‘A::A()’"


 
Un grand merci chef_keeper.  :jap:  
 
La clarté des messages d'erreur est un point étrange du c++ :D
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed