Zeph Le 14/05/2010 à 13:46 Il peut pas, le type de retour de l'opérateur "->" est imposé. Et même s'il ne l'était pas, un programmeur C++ ne s'amuserait pas à coder ce genre de comportement, tout le monde sait bien que c'est stupide et il n'y a pas besoin d'utiliser un langage blindé de garde-fous pour apprendre à coder proprement.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Le warning est : "‘Message::m_EntriesList’ should be initialized in the member initialization list"
Comme dit mon edit du post précédent, g++ se la ferme sans ce switch, et c'est aussi bien ^^
Oui bon, je pense que tu as compris maintenant pourquoi ce switch n'est pas activé par défaut. Les règles de Effective C++ sont loin d'être universellement appréciées!
aze Le 14/05/2010 à 15:44 ben même si elles ne sont pas universellement appréciées, je ne vois pas en quoi ne pas mettre le constructeur par défaut dans la liste d'init en constitue une violation
aze Le 14/05/2010 à 16:12 ben justement non, on dirait plutôt que l'implémentation du warning en fait trop je ne vois pas de principe dans effective c++ qui t'oblige à faire ça
Pen^2 Le 14/05/2010 à 17:22 Aucune idée. Et si ce n'est pas dans les specs, c'est pas une super idée de se baser dessus !
À priori si ça utilise le default allocator ça devrait être le cas, non ?
aze Le 14/05/2010 à 17:32 heu il y a un problème quelque part, car ce n'est pas normal qu'il y ait une exception bad_alloc qui soit levée. ça veut dire qu'il n'a pas pu allouer de la mémoire pour placer le nouvel élément dans la map. ce n'est en aucun cas un moyen de savoir si la clé est déjà présente. pour ça, tu dois utiliser find()
Singleton: Tu peux hériter d'un template singleton si tu veux mettre un peu plus de fun!
Il a pas spécifié qu'il avait cette exception non ?
Ce que j'ai compris moi, c'est qu'il demandait si c'était bien celle-là qui était balancée.
aze Le 15/05/2010 à 01:43 aaah, ok. je pensais que cette exception était balancée ^^
Et c'est reparti les misères...
Donc avec le switch kivabien en moins, j'ai réécrit mes classes utilisant des vecteurs. Typiquement, au lieu de "std::vector<Module*> *m_ModuleList;", je veux utiliser maintenant "std::vector<Module> m_ModuleList;"
C'est à dire avoir non pas un pointeur vers une liste de pointeurs de Module, mais... une liste de Module, tout simplement.
MAIS !
Pour ceux qui ont tout suivi mes périgrinations laborieuses, Module n'est qu'un classe abstraite de laquelle je dérive StaticModule.
Hors quand je fais m_ModuleList.push_back(StaticModule(arg)), il me sort une erreur parce qu'il a besoin d'instancier un objet Module, mais il n'y arrive pas parce que la classe est abstraite (sans blague). Pourquoi je n'ai pas de polymorphisme dans ce cas, étant donné que StaticModule est un objet Module ?
Qui plus est, il a l'air de vouloir faire une copie temporaire de l'objet StaticModule, de sorte qu'il faut que je définisse une méthode de recopie pour ne pas avoir des libérations non souhaitées d'objet pointés... Ca fait chier, au moins, avec ne serait-ce que "std::vector <Module*> m_ModuleList;", j'évitais ça. C'est pourtant la démarche à avoir ?
Voilà, j'ai déjà réécrit avec ce que tu proposes, et tout de suite tout marche. Mais pourquoi tenait-il tellement à instancier un Module quand j'utilisais vector<Module>, et que je faisait un push_back de StaticModule ?