Variables static - destruction [Résolu]

Signaler
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
bonjour:

j'aimerai savoir quand les variables statics sont detruites... en fin d'appli (du main, winMain)? ou ailleurs...? à la derniere occurence?

avant, j'utilisais des variables static standard (int, bool)
et donc la question ne se posait pas
maintenant, j'ai utilisé des classes... (des BListeIndir pour ceux qui veulent savoir donc des listes à détruire absoluement pour éviter les memory leaks...)

f()
{
static Toto titi;
...
}

et est-ce la mm réponse si la variables static appartient à une classe.

classe CBob
{
..
private:
static Toto titi;
...
}

Merci
Magic Nono: l'informagicien!

11 réponses

Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
Merci.

En résumé, pour ceux qui veulent la réponse exacte:
l'OS désalloue la mem static allouée en début de prog en faisant appel aux destructeurs à la sortie du soft.

Magic Nono: l'informagicien!
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
tu pouvais faire ca

#include

struct Foo
{
Foo()
{
std::cout << "appel du constructeur\n";
}

~Foo()
{
std::cout << "appel du destructeur\n";
}

};

static Foo foo;

int main(){}
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tu peux les détruire quand tu quittes ton programme. Pour savoir si elles sont détruites automatiquement, tu n'a qu'a faire un débogage.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Bon j'ai essayé avec une variable static d'une classe créée avec un new, et elle n'est jamais détruite, c'est à toi de le faire.
J'imagine que pour les variables statiques du C c'est la même chose.
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
normal, si tu fait new, C a toi de désallouer en conséquence,

la question, CT sans ptr,
avec directement la classe...

Magic Nono: l'informagicien!
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
une variable statique a la durée de vie d'un programme, en c ou en c++

en c une variable globale spécifiée static limite sa porté au fichier (de meme pour une fonction)

en c++ un attribut de classe (static) est unique (on peut y acceder sans hinstance avec l'orp)
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Une variable statique en fait ce n'est qu'une variable globale qui n'est visible que dans certains endroits, comme une fonction, un fichier...
Donc comme les variables globales, leur durée de vie est celle du programme.

Patience et longueur de temps font plus que force ni que rage....
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
pour detruire une variable statique d'une classe correctement, maintiens un compteur statique du nombre d'objets de ta classe, et détruis ta variable statique qd ce compteur atteint 0.

a+ ;)
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
Je V répéter la question en la spécifiant mieux:
Quand est-ce qu'elle est détruite automatiquement?

Si cela correspond à sa durée de vie, on dira à la sortie du prg...

C bien ça?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Elle n'est jamais détruite, je te l'ai dit, c'est à toi de le faire quand tu n'en n'a plus besoin
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
"Je V répéter la question en la spécifiant mieux:
Quand est-ce qu'elle est détruite automatiquement?

Si cela correspond à sa durée de vie, on dira à la sortie du prg..." -> ben oui; dire qu'elle atteint la fin de sa durée de vie, c'est pareil que de dire qu'elle est détruite...
Au début du prog l'OS te fait une place dans la RAM pour ta variable, et à la fin de son exécution le prog est déchargé de la RAM; ta variable n'existe plus.

vecchio56 >> magic_Nono nous parle pas de variables allouées sur le tas, donc on peut pas les détruire comme ça quand on veut.

Patience et longueur de temps font plus que force ni que rage....