Créer une liste d'objets statiques dans une classe
Je voulais créer une liste d'obets se modifiant facilement et j'ai pensé à cete classe :
Citation:
class List_objets
{
public:
List_objets(int id)
{
list[2000];
}
int get_free_id()
{
int done = 0;
int i = 0;
while(!done && i<2000){if(list_check[i]) {i++;}else {done=true;break; return i;}}
return 0;
}
void new_objet(Object_sort &sort, int x, int y)
{
int id = get_free_id();
list_check[id] = true;
list[id] = &Objet(id, sort, x,y); //******************************pas bien
}
bool list_check[2000];
Objet *list[2000];
} unit_list(1);
J'ai cité toute la classe, mais seule la procédure new_object est problématique. La ligne «list[id] = &Objet(id, sort, x,y);» crée un objet, mais le démolit directement après la fonction. Comment pourrais-je régler ce problème???????????????
Re: Créer une liste d'objets statiques dans une classe
Citation:
Envoyé par crossbowman
Je voulais créer une liste d'obets se modifiant facilement et j'ai pensé à cete classe :
Code:
1 2 3 4 5 6 7
| class List_objets
{
public:
List_objets(int id)
{
list[2000];
} |
Que crois tu que fait ce code ?
En réalité, il lit la valeur de la 2001ème case d'un tableau qui n'en a que 2000, ce qui est une bonne raison de planter le programme, puis il n'en fait rien.
Citation:
Envoyé par crossbowman
Code:
1 2 3 4 5 6 7
| int get_free_id()
{
int done = 0;
int i = 0;
while(!done && i<2000){if(list_check[i]) {i++;}else {done=true;break; return i;}}
return 0;
} |
Que vient faire "done" ? Où as-tu vu que le tableau était initialisé avec des 0 (ou NULL) ?
Citation:
Envoyé par crossbowman
Code:
1 2 3 4 5 6 7
|
void new_objet(Object_sort &sort, int x, int y)
{
int id = get_free_id();
list_check[id] = true;
list[id] = &Objet(id, sort, x,y); //******************************pas bien
} |
Peut-être ce que tu cherches est le placement-new :
Code:
Object *newObject = new(list_check + get_free_id()) Object(id, sort, x, y);
Citation:
Envoyé par crossbowman
J'ai cité toute la classe, mais seule la procédure new_object est problématique.
Hélàs, non...
Re: Créer une liste d'objets statiques dans une classe
Citation:
Envoyé par crossbowman
La ligne «list[id] = &Objet(id, sort, x,y);» crée un objet, mais le démolit directement après la fonction. Comment pourrais-je régler ce problème???????????????
L'appel au constructeur Objet(id, sort,x,y) crée un objet temporaire anonyme. Cet objet temporaire est détruit dès fin de l'instruction. Pour éviter cela, puisque ta liste prend des pointeurs, mieux vaut faire une allocation dynamique normale :
Code:
list[id] = new Object( id, sort, x, y );
Cela dit, ton code a pas mal d'autres problèmes et il y a des chances qu'une solution nettement plus simple et robuste soit facilement envisageable. Le recours à un std::map, peut-être ?