Egy objektumot konstruktor hívás nélkül is lehet "resetelni"?
Adott egy osztályom, melynek egy példányát létrehozom a konstruktor futtatásával. Itt beállítok bizonyos adattagoknak amolyan kezdő értékeket.
Ezek az adattagok futtatás során módosulnak. Mi van akkor, ha ugyanezt az objektumot vissza akarom állítani az alapértékekhez. Futtassam ismét a konstruktort? Akkor létrejön még egy ilyen objektum nem?
Ha írok egy "reset" függvény, amely gyakorlatilag ugyanazokat az adattag beállításokat tartalmazza az jó?
"Mi van akkor, ha ugyanezt az objektumot vissza akarom állítani az alapértékekhez. Futtassam ismét a konstruktort? "
Igen.
"Akkor létrejön még egy ilyen objektum nem? "
Attól függ. Ha a régit írod felül vele, akkor nem.
Objektum objektumPéldány = new Objektum();
//itt csinálsz vele mindenfélét
objektumPéldány = new Objektum();
"Ha írok egy "reset" függvény, amely gyakorlatilag ugyanazokat az adattag beállításokat tartalmazza az jó?"
Jó ez is, csak fölösleges.
Na most azért nagyon nem ugyanarról van szó, ha létrehozol még egy objektumot (mert hogy a konstruktort nem tudod "futtatni" egy létező objektumot, vagy visszaállítasz egy objuktumot az alapértékeire.
Ez a kérdés így túl általános, jó lenne tudni, hogy miről van szó konkrétan.
"Na most azért nagyon nem ugyanarról van szó, ha létrehozol még egy objektumot (mert hogy a konstruktort nem tudod "futtatni" egy létező objektumot, vagy visszaállítasz egy objuktumot az alapértékeire. "
Akárhogyan erőlködök, én nem értem ezt a mondatot. Kifejtenéd?
#4 nem tudom mit kéne rajta kifejteni.
A konstruktor új objektumot hoz létre mindig.
" Azért arra figyelj, hogy ne csinálj memory leak-et, mert #2 is írt elég sok marhaságot."
Igen, azt csinálna egy ilyen tényleg, ha nem 2016-ban lennénk, hanem 1960-ban és nem C#-t használnánk.
Amit #2 írt, az nettó baromság, így csinál az ember memory leak-et. Oh, by the way, 2016-ban is kellene érteni a memóriakezeléshez, és nem mindent a garbage collectorra bízni (pláne, hogy C++ nyelvről van szó, amiben nincs is GC)
A legjobb módszer amit használhatsz, hogy kiszervezed az inicializálást egy külön metódusba, és a konzisztencia kedvéért azt hívod meg a konstruktorodban is. Meg lehet oldani többszörös konstruktorhívást, hogy így működjön (elvégre ez C++), de előbb pakolnám tele a kódomat millió meg egy goto-val, minthogy ezt használjam.
A 18:34-es válaszoló tökéletesen kifejtette.
Amúgy meg attól, hogy bizonyos nyelveken van GC, még nem kell orrba-szájba használni, mivel az is tud jelentősen lassítani a program futásán.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!