( Andrei | 2014. 07. 19., szo – 09:31 )

Azt akarom mondani, hogy az en velemenyem szerint:

- van a Python fele megoldas:
1. lassu mert futasidoben fel kell deritenie a koroket
2. teljesen automatikus
3. nemdeterminisztikusan szabaditja fel az objektumokat
- van a C++:
1. gyors, mert nem detektalja a korkoros referenciakat
2. nem automatikus
3. determinisztikusan szabaditja fel az objektumokat

Es most persze vitatkozhatunk rajta, hogy mennyire automatikus a Python megoldas. Mert nem az, ugyanis igaz, hogy a koroket felderiti es megszakitja "valahol", neked viszont a destruktoraidban (vagy finalizereidben legyen akarmi is a neve) fel kell keszulnod arra, hogy a kulso hivatkozasok mar nem elnek. Ez nyilvan extra kodot es vegiggondolast igenyel a tervezes soran.

Es ha mar valasztanom kell, en szemely szerint inkabb valasztom a C++ megoldast, ahol altalaban 1 helyen kell belenyulni, ahol megszakitod a kort es a tobbi automatikusan megy, mint a Python fele megoldast, ahol az osszes referencia potencialisan invalid lehet a megsemmisites soran. Plusz megkapom a determinisztikus sorrendet, ami miatt aszimptotikusan kevesebb code path letezik (tehat tesztelhetobb a tortenet), lehet, hogy O(1) vs O(n), de az is lehet, hogy O(1) vs. O(n!).

Ebben az esetben nincs silver bullet. Valasztani kell valamelyik ujjadat, amibe beleharapsz.

Es felreertes ne essek: nem azt mondom, hogy a C++ az egyetlen udvozito megoldas, viszont bazi dedos dolog kiragadni a dolog egy aspektusat es az alapjan velemenyezni a teljes megoldast. Mintha azt allitanad, hogy a C++ tervezoi olyan hulyek, hogy nem veszik eszre, hogy nem automatikus a korok kezelese. De eszrevettek, csak eppen volt egy masik szempont amit ervenyesiteni akartak (determinisztikussag + sebesseg), ami felulirta ezt a szempontot.

Szoval nezz a dolgok moge, mielott itelkezel.