2010-06-30 8 views
1

J'ai un programme C++ avec une classe de pointeurs intelligents de comptage de références. Cette classe fonctionne par des pointeurs de cartographie pour référencer compte dans une carte statique:Ordre de commande C++ de la désallocation des membres statiques

map<ValueIntern*,unsigned int>& ValueRetainMapGetter(){ 
    static map<ValueIntern*,unsigned int> m; 
    return m; 
} 

La question que j'ai eu est que certaines variables statiques que je sont désallouées après la carte de référence a été désallouée.

Ma question est: comment puis-je contrôler l'ordre dans lequel les variables statiques sont libérées de sorte que la carte est désallouée après toutes les références.

+0

Comment le fait que "certaines variables statiques" soient "désallouées" * après * la carte crée-t-il des problèmes pour vous? Ce n'est absolument pas clair d'après votre question. – AnT

Répondre

2

Je recommande d'utiliser boost::shared_ptr (ou std::tr1::shared_ptr si c'est dans votre chaîne d'outils) au lieu de rouler les vôtres.

+0

Il y a même beaucoup de saveurs de boost :: pointeurs intelligents à choisir: http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/smart_ptr.htm – jdmichal

+0

Wow, je me sens vraiment intelligent ... mais bon conseil. La raison pour laquelle j'utilisais une carte était parce qu'à l'origine, quand j'ai écrit la classe pour la première fois, c'était une classe modèle, destinée à être utilisée par une myriade d'autres classes. – Maz

+0

@Maz: La chose n'est pas un _class_, c'est un _template_. Un modèle à partir duquel on peut instancier des classes. C'est pourquoi on l'appelle un template __class__. Si ça s'appelait "template class", il faudrait que ce soit une classe à partir de quels templates ... euh ... je ne sais pas. Voir. C'est pourquoi on l'appelle un "template de classe". (Il y a, BTW, aussi des "templates de fonction" .Il s'agit de _templates_ dont les fonctions sont instanciées.Ils ne sont pas, je répète: non, "fonctions de template", car ce ne sont pas des fonctions dont ... um ... ici nous y retournons, c'est pourquoi ils s'appellent __function templates__.) – sbi

Questions connexes