cosiderazione il seguente codice:C++ Matrice di puntatori: cancella o cancella []?
class Foo
{
Monster* monsters[6];
Foo()
{
for (int i = 0; i < 6; i++)
{
monsters[i] = new Monster();
}
}
virtual ~Foo();
}
Qual è il distruttore corretta?
questo:
Foo::~Foo()
{
delete [] monsters;
}
o questo:
Foo::~Foo()
{
for (int i = 0; i < 6; i++)
{
delete monsters[i];
}
}
Al momento ho il costruttore più in alto e tutto funziona okey, ma naturalmente non riesco a vedere se capita di essere che perde ...
Personalmente, penso che la seconda versione sia molto più logica considerando quello che sto facendo. Ad ogni modo, qual è il modo "corretto" per farlo?
Puoi spiegare un po 'perché dovresti disabilitare il costruttore di copie e l'operatore di assegnazione delle copie? – gen
@gen Questa è un'ipotesi, quindi prendila per quello che vale, ma sto * pensando * che senza l'assegnazione/costruzione di copia personalizzata può accadere quanto segue: 2 oggetti Foo con una serie di puntatori mostruosa che puntano al * stessi * mostri. Se distruggi Foo1, i puntatori di Foo2 non saranno validi poiché la memoria a cui puntano è stata liberata da Foo1. – ZeroStatic