Durée de vie des objets
Comprendre quand les objets sont créés et détruits
Durée de vie des objets est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
La naissance des objets
La durée de vie d'un objet commence une fois son espace de stockage alloué et son constructeur terminé. À partir de ce moment, l'objet est entièrement utilisable.
#include <iostream>
struct Widget {
Widget() { std::cout << "born\n"; }
};
int main() {
Widget w; // constructor runs here
}La destruction des objets
La durée de vie s'achève lorsque le destructeur s'exécute. Pour un objet de la pile, cela se produit à l'accolade fermante de sa portée.
#include <iostream>
struct Widget {
~Widget() { std::cout << "dies\n"; }
};
int main() {
Widget w;
std::cout << "alive\n";
} // ~Widget runs hereOrdre de construction et de destruction
Les objets sont détruits dans l'ordre inverse de leur construction. Le dernier construit est le premier démonté.
#include <iostream>
struct Tag {
int id;
Tag(int i) : id(i) { std::cout << "make " << id << "\n"; }
~Tag() { std::cout << "drop " << id << "\n"; }
};
int main() {
Tag a(1);
Tag b(2); // dropped before a
}Durée de vie automatique (pile)
Les objets automatiques vivent pendant toute la durée de leur bloc englobant. C'est le modèle de durée de vie le plus courant et le plus sûr.
Durée de vie dynamique (tas)
Les objets du tas créés avec new vivent jusqu'à l'appel de delete : leur durée de vie est contrôlée par vous, et non par la portée.
#include <iostream>
struct Widget {
~Widget() { std::cout << "dies\n"; }
};
int main() {
Widget* w = new Widget();
std::cout << "still alive\n";
delete w; // destructor runs here
}Durée de vie statique
Les objets dotés d'un stockage static vivent pendant toute la durée du programme. Un objet statique local à une fonction est construit une seule fois, lors de sa première utilisation.
#include <iostream>
int next() {
static int counter = 0; // built once
return ++counter;
}
int main() {
std::cout << next() << next() << next() << "\n";
}Objets temporaires
Un objet temporaire créé dans une expression meurt généralement à la fin de l'expression complète, c'est-à-dire au point-virgule.
#include <iostream>
#include <string>
int main() {
std::cout << (std::string("a") + "b") << "\n";
} // temporary string dies after this lineLes membres sont construits avant le corps
Les objets membres d'une classe sont construits avant l'exécution du corps du constructeur de l'objet englobant, et détruits après le corps de son destructeur.
#include <iostream>
#include <string>
struct Engine { Engine() { std::cout << "engine\n"; } };
struct Car {
Engine e;
Car() { std::cout << "car\n"; }
};
int main() { Car c; }Prolonger la durée de vie avec une référence const
Lier un objet temporaire à un const& prolonge sa durée de vie pour l'aligner sur celle de la référence : une règle pratique du C++.
#include <iostream>
#include <string>
int main() {
const std::string& s = std::string("hi");
std::cout << s << "\n"; // s still valid
}Utilisation après la fin de la durée de vie
Accéder à un objet après la fin de sa durée de vie produit un comportement indéfini : c'est le classique bogue de référence pendante ou d'utilisation après libération.
La durée de vie est au cœur de RAII
Comme les destructeurs s'exécutent de manière déterministe à la fin de la durée de vie, le C++ lie le nettoyage des ressources à cette durée de vie : c'est le fondement de RAII, qui sera présenté dans le prochain cours.
Vérification rapide
Testez votre compréhension de la durée de vie des objets.
Récapitulatif
Vous avez appris que la durée de vie d'un objet commence après sa construction et s'achève avec sa destruction. Les objets automatiques suivent la portée, les objets dynamiques suivent new/delete, et les objets statiques durent pendant tout le programme. La destruction se produit dans l'ordre inverse : c'est le fondement de RAII.
Questions Fréquemment Posées
La leçon « Durée de vie des objets » est-elle gratuite ?
Oui — le texte complet de « Durée de vie des objets » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Durée de vie des objets » ?
Comprendre quand les objets sont créés et détruits Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Durée de vie des objets » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Allocation sur la pile
- Allocation sur le tas avec new/delete
- Durée de vie des objets
- Bugs courants de mémoire