Bonjour,
J'utilise un code qui fait appel à une liste d'objets "Route" déclarée comme donnée membre privée de la classe RouteFactory:
et un vecteur d'objets "Route*" déclarée comme donnée membre privée aussi dans cette même classe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part list <Route> listRoute;
La classe Route contient entre-autres la méthode suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part vector <Route*> pRoute;
Ces 2 données membres sont mis à jour lors de la création d'une instance "Route" dans la classe RouteFactory de cette manière:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Status Route::getCurrentStatus(void) { Status lastStatus; switch(m_curStatus) { case stop : cout << "Route::getCurrentStatus: STOP status" << endl; lastStatus = STATUS_VALUE_STOPPED; break; case start : cout << "Route::getCurrentStatus: START status" << endl; lastStatus = STATUS_VALUE_STARTED; break; case complete : cout << "Route::getCurrentStatus: COMPLETE status" << endl; lastStatus = STATUS_VALUE_COMPLETED; break; default : cout << "Route::getCurrentStatus: DEFAULT status" << endl; lastStatus = STATUS_VALUE_STOPPED; break; } cout << "Route::getCurrentStatus: Play status is: " << lastStatus << endl; return lastStatus }
Dans la classe RouteFactory, j'ai la méthode suivante qui utilise nos données membres:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Route *route = new Route(); if(route) { listRoute.push_back(*route); pRoute.push_back(route); }
J'obtiens les traces suivantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 void RouteFactory::listRoute() { for (std::list <Route>::iterator it = listRoute.begin() ; it != listRoute.end(); it++) { cout << "RouteFactory::listRoute: Status with iterator is: " << it->getCurrentStatus() << endl; } cout << endl; for(unsigned int i = 0; i < pRoute.size(); ++i) { Route *p = pRoute.at(i); cout << "RouteFactory::listRoute: Status with vector of pointer is: " << p->getCurrentStatus() << endl; } }
Le résultat attendu lors du test en question est d'obtenir 0 pour la deuxième instance parcouru.Route::getCurrentStatus: STOP status
Route::getCurrentStatus: Play status is: 2
RouteFactory::listRoute: Play status with iterator is: 2
Route::getCurrentStatus: STOP status
Route::getCurrentStatus:: Play status is: 2
RouteFactory::listRoute: Play status with iterator is: 2
Route::getCurrentStatus:: STOP status
Route::getCurrentStatus:: Play status is: 2
RouteFactory::listRoute: Play status with vector of pointer is: 2
Route::getCurrentStatus:: START status
Route::getCurrentStatus:: Play status is: 0
RouteFactory::listRoute: Play status with vector of pointer is: 0
J'aurais pensé que ces deux codes fournirait le même résultat.
Ma question est pourquoi avec l'utilisation de la liste d'objets listRoute, je récupère 2 au lieu de 0?
Merci d'avance.
Partager