L'ho chiesto perché tempo fa mi sembrava di aver visto una imprecisione.
Comunque (in teoria) l'approccio corretto è questo, (incompleto comunque: l'incremento di indice dov'è?) visto che a ogni ciclo devi allocare un oggetto.
Pero:
la & va tolta come detto da menphisx e il prototipo void myFunc(oggetto* obj){implementazione}; deve diventare void myFunc(oggetto*& obj){implementazione};
Così passi un reference al puntatore.
codice:
while(indice<MAXINDICE)
{
oggetto * pOggetto = new oggetto();
myFunc(pOggetto);
myArray.add(pOggetto);
}
Personalmente modificherei il codice in questo modo:
codice:
while(indice<MAXINDICE)
{
oggetto* pOggetto = myFunc();
myArray.add(pOggetto);
indice++;
}
In pratica sposterei l'allocazione all'interno della funzione myFunc (e considererei l'uso di smart_pointer in caso la new sollevasse un'eccezione).
P.S.
L'ultimo passo potrebbe essere non necessario se myFunc è intelligente. Ad esempio.
codice:
oggetto* myFunc() {
try {
oggetto* mObj = new oggetto();
// cose varie da fare
return mObj;
} catch (std::bad_alloc&) {
return 0; // o NULL (stessa cosa)
}
return 0; // o NULL (stessa cosa) qui per evitare un eventuale warnig del compilatore.
}