L'invocation d'un programme conduit à la création d'un processus ; celui-ci a une existence en mémoire et une durée de vie, qui va de son chargement à son déchargement. La durée de vie d'un objet est une portion de la durée de vie de ce processus.
Le mode d'allocation d'un objet global est statique et sa durée de vie est celle du processus. Un objet local, s'il est déclaré static, a également un mode d'allocation statique ; l'initialisation éventuelle de cet objet n'a lieu qu'une fois. Par exemple, la fonction f suivante affiche le nombre de ses appels depuis le début de l'exécution du programme, grâce à sa variable statique compteur ; si cette variable n'était pas déclarée static, elle serait initialisée à zéro à chaque appel, donc la fonction afficherait toujours 1 :
void f() { static int compteur = 0; // ... compteur++; cout << "La fonction f a été appelée " << compteur << " fois.\n"; }
Un objet local, c'est-à-dire résultant d'une définition à l'intérieur d'une fonction, et qui n'est pas déclaré static, a un mode d'allocation automatique et a pour durée de vie celle d'un bloc d'activation, c'est-à-dire d'une évaluation d'un appel de cette fonction. Si une fonction est invoquée plusieurs fois au cours de l'exécution du même programme, chaque invocation donne lieu à un nouvel objet local.
Un objet créé dynamiquement, par l'opérateur new ou new[] a une durée de vie qui s'étend depuis le retour de new jusqu'au déchargement du processus ou jusqu'à une dés-allocation de cet objet réalisée par l'opérateur delete ou delete[].