Bonjour,
Je n'arrive pas à trouver la synthaxe correcte qui me permetterait d'utiliser new avec un constructeur spécifique, genre ayant une class A avec un constructeur A(int a) :
Quelqu'un aurait-il une idée ?Code:A * i = new A(5)[10];
Version imprimable
Bonjour,
Je n'arrive pas à trouver la synthaxe correcte qui me permetterait d'utiliser new avec un constructeur spécifique, genre ayant une class A avec un constructeur A(int a) :
Quelqu'un aurait-il une idée ?Code:A * i = new A(5)[10];
Salut
J'ai déjà rencontré ce problème. Il te faut :
- Soit un constructeur par défaut sans argument
- Soit appeler chaque constructeur "manuellement" mais ce n'est pas toujours possible.
Mais il n'y a pas de syntaxe pour l'opération précise que tu cherches, malheureusement.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 struct A { A() : a(0) {} A(int a_) : a(a_) {} int a; }; int main(int argc, char * argv[]) { A * i = new A[10]; A j[3] = {A(2),A(3),A(5)}; delete[] i; return 0; }
Je dirais :
Non ?Code:
1
2
3 // v contient 10 instances de A construites avec A::A(int) std::vector<A> v(10, A(5));
C'est un vector et plus un tableau C++, mais c'est une très bonne solution, à condition que l'objet soit copiable.
Condition nécessaire au cas 2 de ma réponse soit dit en passant, mais pas au cas 1.
Pour créer un tableau d'objet, il faut obligatoirement que cette classe possède un constructeur par défaut, car siono il est impossible d'allouer la mémoire nécessaire (à part à créer un tableau de pointeur sur la classe)
Donc ton exemple ne peut pas marcher si la classe A n'a pas de constructeur par défaut.
Ensuite, i est pointeur sur la classe A. Donc:
- soit tu alloues un tableau d'objet de type A (il faut que le constructeur par défaut existe),
Code:A *i = new A[10];
- soit tu crées une instance d'un objet A
Code:A *i = new A(1);