Portál AbcLinuxu, 15. července 2025 05:10


Dotaz: C++ test na existenci dynamicky alokovane promenne

menphis avatar 19.8.2008 23:51 menphis | skóre: 22 | blog: menphis_blog
C++ test na existenci dynamicky alokovane promenne
Přečteno: 401×
Odpovědět | Admin
dneska jsem resil zhruba nasledujici problem:

mam tridu
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 ?

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Luboš Doležel (Doli) avatar 20.8.2008 00:12 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: C++ test na existenci dynamicky alokovane promenne
Odpovědět | | Sbalit | Link | Blokovat | Admin
Inicializovat data v konstruktoru na 0
menphis avatar 20.8.2008 00:31 menphis | skóre: 22 | blog: menphis_blog
Rozbalit Rozbalit vše Re: C++ test na existenci dynamicky alokovane promenne
dik, ale tohle prave nechci, protoze promenou data budou pouzivat jen nektere instance tridy, takze ji nechci vytvaret v konstruktoru tridy, ale az ve chvili kdy bude potreba.
Luboš Doležel (Doli) avatar 20.8.2008 00:42 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: C++ test na existenci dynamicky alokovane promenne
Co je to za blbost? Jaké vytváření proměnné? :-)
menphis avatar 20.8.2008 01:10 menphis | skóre: 22 | blog: menphis_blog
Rozbalit Rozbalit vše Re: C++ test na existenci dynamicky alokovane promenne
sorry ze tu pisu hlouposti , ale s cpp teprve zacinam. myslel jsi to teda cca takhle ? :

v konstruktoru tridy:
double u=-1;  
*data=&u;
a pak v destruktoru tridy
if ( *data < 0 ) 
delete [] data;
20.8.2008 01:27 Jirka P.
Rozbalit Rozbalit vše Re: C++ test na existenci dynamicky alokovane promenne
Ne. data je ukazatel, dá se použít jako hodnota. Když je 0, je prázdný. Takže v konstruktoru

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.
Luboš Doležel (Doli) avatar 20.8.2008 01:35 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: C++ test na existenci dynamicky alokovane promenne
Pokud alokace selže, vyhodí výjimku.
Což se dá změnit použitím new (nothrow) nebo použitím set_new_handler().
menphis avatar 20.8.2008 02:09 menphis | skóre: 22 | blog: menphis_blog
Rozbalit Rozbalit vše Re: C++ test na existenci dynamicky alokovane promenne
dik...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.