| | |
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Autor | Správa |
---|
Registrovaný: 01.02.08 Prihlásený: 10.04.15 Príspevky: 31 Témy: 11 | Napísal HT: 14.05.2011 17:04 | |
|
Zdravim potreboval by som spravit nieco nasledovne:
Kód: trieda::trieda(char *filename) { FILE *file=NULL; vfile=fopen(filename,"r"); if (!vfile) {
delete this; // this=NULL <--- toto nefunguje return; } ... fclose(vfile); }
Proste ak nastane nejaka chyba tireda sa nema vytvorit a ukazovatel na triedu sa nastavi na NULL. Da sa to zariadit priamo v konstruktore alebo to musim riesit mimo?
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 Bydlisko: Zilinska Un... |
Ja si myslim, ze toto je zle riesenie.
Nemam cas to skusat, ale toto "delete this;" by malo fungovat v poho, uz som to robil, ale ako to robis ty to je nebezpecne. Moznos v konstruktore vymazat pamat, beriem ako zle riesenie. Pretoze, ty budes v dalsom kode sa snazit tu pamat pouzivat, nahodou ti v konstruktore hodi delete a ti spadne cely soft pri pokuse citat z pamate. Vedel by som to spravit, ale je to moc komplikovane, potreboval by si nezavislu triedu, ktora ti kontroluje validitu pointrov. Myslim, ze toto nemusis vobec riesit o co sa snazis alebo to sprav z vonku. Delete sa ma pouzit vtedy, ked uz nachces resp. nepotrebujes robit s datami.
Ak chces kompletny system pre taku inteligentu spravu pamate, tak pouzi toto:
http://www.boost.org/doc/libs/1_46_1/li ... rt_ptr.htm
tiez to pouzivam, nemusis pouzivat delete, ked nastane problem, pamat sa sama vymaze a ty si cez objekt dokazes overit ci sa to uz stalo, teda ci je pointer validny.
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
Registrovaný: 11.01.09 Prihlásený: 29.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 14.05.2011 23:12 | |
|
Myslim, ze na taketo pripady nam C++ ponuka exceptions:
Kód: trieda* tr;
try { tr = new trieda( "abcdef" ); }
catch( MyException ) { cout << "- exception raised..." << endl; delete tr; }
Miesto toho 'delete this' das throw MyException.
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 Bydlisko: Zilinska Un... |
Ano to je dalsia moznost, ale ja som mu chcel dat moznost, aby sa mu normalne odstranila pamat a program bezal v poho dalej. Uz je na nom ako si to zariadi, ale urcine nie tak ako pisal on .
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
Registrovaný: 01.02.08 Prihlásený: 10.04.15 Príspevky: 31 Témy: 11 | Napísal autor témy HT: 15.05.2011 9:21 | |
|
Diky za odpovede uz som to vyriesil podmienkou pred vytvaranim triedy.
Kód: FILE *readf=NULL; readf=fopen(cesta,"r"); if (readf) { tr = new trieda(readf); fclose(readf); readf=NULL; }
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 Bydlisko: Zilinska Un... |
Zrovna toto sme nemysleli, chcel si nieco ine, ale ked ti to vyhovuje, tak v poho. Si myslim, ze to je zas hlupost, co si napisal. Ty posielas tej triede pointer na subor a nasledne ho uzatvoris fclose, myslis, ze to je fajn? Funguje ti to tak ako ma? . V tonto pripade mozes ten subor pouzit iba v konstruktore, lebo ho potom uzavries, k datam sa nedostanes cez metody. Tu funkcionalitu toho suboru, by som presunul do triedy.
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
Registrovaný: 01.02.08 Prihlásený: 10.04.15 Príspevky: 31 Témy: 11 | Napísal autor témy HT: 15.05.2011 16:51 | |
|
Funguje to velmi dobre mne staci z toho suboru nacitat udaje, dalej ho nepotrebujem.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Mám sa učiť C ++/objective C/ C#? v Assembler, C, C++, Pascal, Java | 5 | 724 | 08.07.2014 20:40 XOLOO | | K: PC Literaturu- C++/C#/java/python/ruby/RoR v Kúpim | 0 | 405 | 13.05.2014 18:16 expresado | | Hladam hracov na C&C Generals Zero Hour v Počítačové hry | 10 | 1243 | 07.03.2007 19:22 Spirit | | rozdiel medzi Borland 3.1 C++ vs Net. C++ v Assembler, C, C++, Pascal, Java | 4 | 570 | 20.07.2010 12:54 walther | | Hledá se programátor C/C++ pro vesmírné projekty (Praha) v Ponuka práce | 0 | 1117 | 10.05.2016 14:59 evolvsys | | Naučte se C++ za 21 dní + C++Builder 6 v Assembler, C, C++, Pascal, Java | 18 | 2406 | 21.05.2010 21:08 Wpegb | | aky je rozdiel medzi C++ a Visual C++ ? v Assembler, C, C++, Pascal, Java | 8 | 1952 | 19.02.2011 22:46 vendo2 | | Čo mi treba na programovanie v C/C++ v Assembler, C, C++, Pascal, Java | 17 | 1141 | 25.09.2011 18:14 reDo | | Hladame 3x C/C++ Linux developer- projekt 11/2016-2/2017 v Ponuka práce | 1 | 545 | 24.10.2016 15:28 michalesku | | Darujem knihy o programovaní (HTML, Java, Visual C++, C++ Builder, Android) v Vymením a darujem | 0 | 421 | 01.04.2019 11:20 tomasteicher | | C&C Generals : Zero Hour - turnaj v Počítačové hry | 0 | 767 | 25.02.2009 20:18 k0t0l | | C# alebo C++ appka/program na výpočty v Assembler, C, C++, Pascal, Java | 1 | 369 | 20.03.2015 22:36 walther | | Ako nastavit grafikuv AMD catalyst c.c. v ATI/AMD grafické karty | 17 | 1476 | 26.12.2013 11:38 walther | | C - Ako prekompilovať .c súbor do .exe? v Assembler, C, C++, Pascal, Java | 7 | 551 | 02.11.2012 18:47 MasterMatoSK | | program na projekt (C#, C++, pascal, java) v Assembler, C, C++, Pascal, Java | 2 | 824 | 12.03.2009 12:08 Svjatogor | | C/C++ problém so súbormi a hodnotami v Assembler, C, C++, Pascal, Java | 2 | 304 | 09.12.2012 10:43 nBXXL |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|