[C++]Pourquoi le constructeur est pas appelé?
Malab29
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
Malab29 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
Malab29 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
Je viens de me remettre au C++ et je n'arrive pas à comprendre pourquoi le constructeur (ni le destructeur) par défaut n'est pas appelé sur les objets mng2 et mng3...
Est-ce que quelqu'un peut m'expliquer ce qui se passe ?
Pour faire plus simple, quelle est la différence entre :
et
J'ai mis un exemple de code simple ci-dessous pour illustrer le problème.
Est-ce que quelqu'un peut m'expliquer ce qui se passe ?
Pour faire plus simple, quelle est la différence entre :
Objet monObj1(); // avec ()
et
Objet monObj1; // sans ()
J'ai mis un exemple de code simple ci-dessous pour illustrer le problème.
/** * main.cpp * Le constructeur vide n'est affiché qu'une seule fois (au lieu de 3 !) --> pour mng1 * Le constructeur non-vide fonctionne et est appelé une seule fois --> pour mng4 * * Aucun constructeur (ni destructeur) n'est appelé pour mng2 et mng3... POURQUOI ??? :( * * Le destructeur n'est appelé que 2 fois (pour mng1 et mng4) */ #include <iostream> #include <string> using namespace std; class SerialManager{ public: SerialManager(); SerialManager( string str ); ~SerialManager(); }; SerialManager::SerialManager(){ cout << "Constructeur vide" << endl; } SerialManager::SerialManager( string str ){ cout << "Constructeur non-vide : str=" << str << endl; } SerialManager::~SerialManager(){ cout << "Desctructeur" << endl; }; // fonction pour voir l'appel au destructeur void fonction(){ SerialManager mng1; // sans (), le constructeur vide de SerialManager est appelé (OK) SerialManager mng2(); // avec (), Pourquoi le constructeur vide et le destructeur de SerialManager ne sont **PAS** appelés ??? SerialManager mng3(); // avec () Pourquoi le constructeur vide et le destructeur de SerialManager ne sont **PAS** appelés ??? SerialManager mng4("tutu"); // sans (), le constructeur non-vide de SerialManager est appelé (OK) } int main(){ fonction(); return 0; }
A voir également:
- [C++]Pourquoi le constructeur est pas appelé?
- Appelé en inconnu - Guide
- Dans le document à télécharger, trouvez les lettres situées derrière les rectangles pour reconstituer le nom du chat. comment s'appelle-t-il ? - Forum InDesign
- Ecouter le repondeur de quelqu'un sans l'appeler ✓ - Forum Mobile
- Je peux appeler mais pas recevoir d'appel sur mon portable - Forum Réseaux sociaux
- La zone de données passée à un appel système est insuffisante - Windows 11