Tuxi wrote:Toimii, jos tekee näin:
Code: Select all
a = MakeObject()
Repeat
If a Then
DeleteObject a
a = 0
EndIf
Forever
Tuo toimii, jos tietää, minne sen osoittimen on sijoittanut. Mutta entä jos teet 2D-taulukon (koko vaikkapa 128x96) ja sijoitat osoittimen yhteen tämän taulukon soluista? Poistaessasi objektin sinun pitäisi käydä koko taulukko läpi löytääksesi pointterin ja voidaksesi nollata sen. Ja tämä syö tehoja. Jos osoitin jää poistamatta, se voi jossain vaiheessa tulla esiin ohjelmassa ja aiheuttaa MAV:n, jos objektin olemassa oloa ei tarkisteta 100% varmuudella.
KilledWhale wrote:Periaatteessa objektimuuttujien nollaus on turhaa koska niidenkin jatkuva tarkastaminen syö tehoja. Paras tapa on vain opetella käyttämään objekteja ja opetella tietämään itse mitä on olemassa ja mitä ei.
Entä mitenkäs vältytään kokonaan objektimuuttujien tarkistamiselta? Väliaikaiset muuttujat toki tuhoutuvat funktiokutsujen lopussa ja vievät vanhat osoittimet mennessään, mutta miten sitten globaalien muuttujien, taulukoiden, tyyppien kenttien yms. kanssa? Usein pakko tarkistaa jollakin tapaa.
P.S. Uskon ettei kaikkia objekteja tarvitse käydä läpi vain saadakseen tietää, onko tietty objekti olemassa vai ei. MEMBlockSize()-funktio voisi paljastaa asian, jos sille syöttäisi objektiosoittimen. Kuvien kanssa toimii ainakin, joten luulisin että myös objektien tarkistaminen onnistuisi sillä.