Instance de classe (question stupide) [Résolu]

Signaler
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
-
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
-
Une petite question idiote que je ne me suis jamais posée (je n'ai jamais rencontré ce problème auparavant d'ailleurs)

J'ai ce code :



struct Objet {

void* pointeur;

Objet(void*);

};



Maintenant je veux créer un objet Objet :

Objet* obj = new Objet(new int(0));

Mais si je veux créer un tableau comme cela ?

Objet* obj = new Objet[5]; ne marche pas puisqu'il n'y a pas de
fonction constructeur qui ne prenne pas de paramètres dans Objet (et je
ne peux pas en créer parce que mon vrai code est un peu plus compliqué)



Sauf que :

Objet* obj = new Objet(new int(0))[5]; ne marche pas


Objet* obj = new Objet[5](new int(0)); ne marche pas



Alors comment faire ?

CyberP,
Celui qui dit que toute question a une réponse

3 réponses

Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
N'utilises pas de void* en c++, ce n'est pas comme en c.



Pour ton probleme,



Soit tu alloues avec new[] (qui appel le constructeur par defaut de
chaque instance) puis tu parcours le tableau en appelant le
constructeur souhaité. Pas trés performant car constructeur appelé 3
fois (en comptant la copie temporaire lors de l'affectation).



Soit tu utilises std::vector (reserve + push_back avec appel du bon constructeur), je tee conseil ca si tu débute



La solution à la base c'est d'allouer en utilisant un des allocateurs
du c++ (ou malloc) et de construire l'objet via un placement new, mais
dans ce contexte la c'est tres bien fais par vector
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
Hmm de toutes façons je ne peux pas prendre de new[] parce que je ne
peux pas faire de constructeur par défaut (parce que l'objet est dans
un tableau de pointeurs autre part et va avoir des appels de fonctions
d'un autre thread et si le truc est pas initialisé ça va tout faire
planter)

Je vais voir pour std::vector



Notes que j'ai juste inventé quelque chose avant, je n'ai pas fait attention à void* ou pas void*

CyberP,
Celui qui dit que toute question a une réponse
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
3
si tu ne fais pas de constructeur par défaut, déclare le plutot en privé



struct Objet

{

private:

Objet(); // pas la peine de mettre {} (de le définir)

};