28 votes

C ++, tableau d'objets sans <vector>

Je veux créer en C ++ un tableau d'objets sans utiliser STL.

Comment puis-je faire ceci?

Comment pourrais-je créer un tableau d'Object2, qui n'a pas de constructeur sans argument (constructeur par défaut)?

32voto

sharptooth Points 93379

Si le type en question a un constructeur sans arguments, utilisez new[] :

 Object2* newArray = new Object2[numberOfObjects];
 

n'oubliez pas d'appeler delete[] lorsque vous n'avez plus besoin du tableau:

 delete[] newArray;
 

S'il n'a pas un tel constructeur, utilisez operator new pour allouer de la mémoire, puis appelez les constructeurs sur place:

 //do for each object
::new( addressOfObject ) Object2( parameters );
 

Encore une fois, n'oubliez pas de désallouer le tableau lorsque vous n'en avez plus besoin.

13voto

Kirill V. Lyadvinsky Points 47627
// allocate memory
Object2* objArray = static_cast<Object2*>( ::operator new ( sizeof Object2 * NUM_OF_OBJS ) );
// invoke constuctors
for ( size_t i = 0; i < NUM_OF_OBJS; i++ )
  new (&objArray[i]) Object2( /* initializers */ );

// ... do some work

// invoke destructors
for ( size_t i = 0; i < NUM_OF_OBJS; i++ )
  objArray[i].~Object2();

// deallocate memory
::operator delete ( objArray );

10voto

mukeshkumar Points 1112

En supposant que votre classe est Base et que vous avez un constructeur à un argument

 Base arr[3] = {Base(0), Base(1), Base(2)} ;
 

4voto

Raul Agrait Points 3177
 Object2 *myArray[42];
for (int i = 0; i < 42; i++)
{
  myArray[i] = new Object2(param1, param2, ...);
}
 

Plus tard, vous devrez parcourir le tableau et désallouer chaque membre individuellement:

 for (int j = 0; j < 42; j++)
{
  delete myArray[j];
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X