( saxus | 2016. 01. 18., h – 00:21 )

Ez Andrei-nek szól, csak a hozzászólásában van egy link.

"mert egeszen biztosan hosszabb a szulo lifetime-ja."

Erre azért nem kellene feltétlen alapozni, rengetegszer futottam már bele olyanba, hogy itt vagy ott, de maradt még ilyen vagy olyan okból egy referencia egy belső objektumra.

Viszont sikeresen mondtál három olyan esetet, amiből igazából segfault is lehet és/vagy a viselkedés nem meghatározott, míg egy GC-s nyelvben olyanból nem fordulhat elő hiba, hogy körreferencia van. Nem állítom egyébként, hogy lehetetlen ott is ocsmányságot elkövetni (pl. C#-ban eventekre való feliratkozáskor el lehet követni memleaket szélsőségesebb esetben, illetve még a resourcek kavarhatnak be), de ahhoz általában már valamit alapvetően el kell rontani.

Másrészt determinisztikusság. Igazából attól, hogy számolod a referenciát és tudod, hogy scope elhagyásakor fel fog szabadulni a resource, még egyáltalán nem lesz determinisztikus. Hiszen több referenciád is lehet és nem fogod tudni feltétlen megmondani pontosan, hogy mikor is fog valójában felszabadulni a resource. Ilyen szempontból az IDisposable jóval explicitebb még akár az ilyen szempontból trükkösebb generator method-oknál is. (Igaz, ott a using használata nem túl praktikus, csak a try-finally-é, ugyanis az első yield return-nál meghívná a Dispose() -t.)

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™