Portál AbcLinuxu, 15. července 2025 05:10
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.