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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
list <Route> listRoute;
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
vector <Route*> pRoute;
La classe Route contient entre-autres la méthode suivante:
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 
}
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
 
Route *route = new Route();
if(route)
{
    listRoute.push_back(*route);
    pRoute.push_back(route);
}
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
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; 
  }
}
J'obtiens les traces suivantes:
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
Le résultat attendu lors du test en question est d'obtenir 0 pour la deuxième instance parcouru.
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.