Autor Zpráva
Darker
Profil
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
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
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
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.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0