1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| Tab2D::Tab2D(int line, int row):line(line),row(row),tab(NULL)
{
try
{
tab = new type*[line];
/* indispensable pour assurer l'exception safety */
for(int i=0;i<line;++i)
tab = NULL;
for(int i=0;i<line;++i)
tab[i] = new type[row];
}
catch(std::exception& e)
{
/* si l'allocation du pointeur de pointeur a réussi, il faut
* libérer la mémoire allouée aux tableaux avant que
* l'exception ne soit lancée
*/
if(tab!=NULL)
{
for(int i=0;i<line;++i)
delete[] tab[i];
}
delete[] tab;
tab=NULL;
/* sans oublier de relancer l'exception */
throw e;
}
} |