Autor | Zpráva | ||
---|---|---|---|
Darker Profil |
#1 · Zasláno: 9. 4. 2012, 16:27:14
Zjistil jsem, že nejsem schopen vyřešit ani dohledat docela triviální problém:
chci vytvořit metodu destroy, která smaže objekt. Ukazatale na objekt by pak vracely null nebo undefined. Napadly mě jen blbosti, které nemají šanci uspět: this = null; //This nelze měnit, takže smůla delete this; //To samé |
||
Aleš Janda Profil |
#2 · Zasláno: 9. 4. 2012, 20:43:54
To podle mě nelze snad v žádném jazyce. Nějaké delete this; by třeba v C++ mohlo projít, ale všechny ukazatele by pak ukazovaly na nenaalokované místo v paměti. Něco takového je u jazyků s automatickou správou paměti nemyslitelné, takže to nejde vůbec.
Spíš to ale ukazuje na nějakou chybu návrhu - mohlo by stačit něco jako nastavení příznaku jeSmazano :-) |
||
Darker Profil |
Šlo mi o uvolnění paměti, objekt představuje velký kus HTML.
Živá ukázka, nečekám že se někdo vyzná v kódu, nicméně objekt se klividuje na řádku 350 main.js. K ukázce: Test se pustí vybráním jazyka, klepnutím na název slovníku a na název kapitoly (zatím všude čísla). Formát slovníku: #Lesson nazev lekce cesky[TABULATOR]anglicky cesky;cesky2[TABULATOR]anglicky;anglicky2 Formát pochází z freewarového testeru sloní zásoby který mi nebyl dost dobrý... |
||
Aleš Janda Profil |
#4 · Zasláno: 9. 4. 2012, 20:58:38
V tom případě by se to mělo nastavovat na null někde jinde, ne z kontextu toho objektu (to se mi zdá jako docela nepěkné :-)).
|
||
Nox Profil |
#5 · Zasláno: 9. 4. 2012, 21:01:11
Pokud máš v objektu hodně dat, tak by stačilo smazat ta data, ne?
Nebo třeba vracet z destoy() this a používat to jako delete object.destroy() |
||
Darker Profil |
Nox:
„destoy() this a používat to jako delete object.destroy()“ To se mi líbí, zkusím to. Popravdě řečeno přesně nevím jak poznat že je to smazané... Edit: Objekt se přiřazuje globální proměnné a pod tou ho najdu i po smazání. Uvolní se v paměti když pak do stejné proměnné uložím jiný? (nový test po skončení starého) |
||
Chamurappi Profil |
Reaguji na Darkera:
Z paměti se maže to, na co se už nedá dostat. Docela jednoduché pravidlo. Nemusí se to ovšem fyzicky smazat hned, jakmile zrušíš všechny reference — jen se ví, že se to smazat může, až nastane vhodná doba k úklidu. |
||
Časová prodleva: 12 let
|
0