CyberP
Messages postés283Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention 4 juillet 2007
-
22 févr. 2005 à 18:30
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 2006
-
22 févr. 2005 à 20:11
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
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 20065 22 févr. 2005 à 19:39
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
CyberP
Messages postés283Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention 4 juillet 20072 22 févr. 2005 à 19:59
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