Portál AbcLinuxu, 3. listopadu 2025 19:32
class Trida
{
public:
double* data
Trida(int);
~Trida();
Test(i);
};
v metode test dynamicky alokuji pole:
data = new double[i];jak lze pote v destruktoru tridy (ale i jinde) zjistit, zda se pole skutecne alokovalo ? obvykla metoda
if (data)selze, protoze promena data existuje a navic ukazuje i na konkretni misto v pameti. vim, ze by se napriklad pomoci bloku try dalo testovat, zda se vytvoreni pole povedlo primo v metode Test(i) a pripadne nastavit nejakou vlajku, ale takove reseni mi prijde docela kostrbate. neexistuje nejaky lepsi zpusob ?
data v konstruktoru na 0
double u=-1; *data=&u;a pak v destruktoru tridy
if ( *data < 0 ) delete [] data;
data=0;
v destruktoru
delete [] data;
alokace (pozn. není exception-safe)
delete[] data; data=new double[2];
použití
if(data) use_data;
Pokud alokace selže, vyhodí výjimku.
Pokud alokace selže, vyhodí výjimku.Což se dá změnit použitím
new (nothrow) nebo použitím set_new_handler().
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.