Folco (./840) :
Sasume (./837) :
Ah parce qu’à chaque fois tu empiles les appels de fonction ?
J'ai deux situations :
- Module1 fait charger Module2 par le TaskManager, et Module2 en quittant demande au TM de repasser la main au module précédant : je dois donc empiler.- Module1 fait charger Module2, mais n'attends pas de retour : le TM doit donc décharger Module1 avant de charger le 2.
Je ne suis pas sûr de comprendre ces subtilités mais globalement c’est simple : si le TaskManager doit allouer ou libérer des modules au cours de l’exécution, c’est sûrement plus simple d’allouer sur le tas.
Souci avec une liste d'initialisation d'un objet (pour changer...) :
std::vector<Module> *m_ModuleList;
std::vector<int> *m_TaskList;
Ces deux pointeurs sont des attributs d'un objet. Donc quand je crée cet objet, deux vecteurs sont créés, et *m_ModuleList et *m_TaskList prennent comme valeur l'adresse des-dits vecteurs.
Et donc dans ma liste d'init, je mets quoi ? Je vais pas initialiser l'adresse des vecteurs à autre chose pour le plaisir, non ? Et g++ râle si je ne mets rien...
Comment faire propre ? (à moins que je n'ai pas compris le mécanisme de la création des objets :/)
Tu ne peux rien mettre dans la liste d’initialisation, à part m_ModuleList(0), mais ça n’a pas grand intérêt. Tu dois faire l’allocation dans le corps du constructeur.Sinon (à mon avis le mieux), tu peux ne pas utiliser des pointeurs vers des vectors, mais des vectors, tout simplement. Et là tu n’as rien à mettre dans ton constructeur, les vectors seront automatiquement construits avec le constructeur par défaut (celui sans paramètre).