( vilmos.nagy | 2016. 01. 17., v – 01:53 )

teljesen értem, mit szeretnél mondani, de az továbbra sem pontos.

A következő két kód tökéletesen* ekvivalens Javaban:


    public void test1() {
        InputStream is = getInputStream();
        try {
            is.read();
        } catch (IOException e) {
            //catch
        } finally {
            // close
            if (is != null) {
                try {
                    is.close();
                } catch (Exception ignore) {
                }
            }
        }
    }
    
    public void test2() {
        try(InputStream is = getInputStream()) {
            is.read();
        } catch (IOException e) {
            // catch
        }
    }

Meg merem kockáztatni, C#-ban is hasonló syntax sugar a using, semmi több.
Itt, az első esetben, bár nem használok Closeable interfészt, se try-with-resources dolgot, mindenféle GC nélkül elenged minden erőforrást az InputStream a blokk végén. Ezt el lehet érni mindenféle IDisposable, meg using, meg egyebek nélkül is, rendesen odafigyelve. És nem, ennek továbbra sincs semmi köze ahhoz, hogy „annak az egy szem objektumnak a felszabaditasa mar determinisztikus lesz”. Meg lesz hívva egy függvény, amit sacc-per-kábé ugyanarra szokás használni, mint a destruktort c++-ben (engedje el a korlátos erőforrásait az objektum), de ez merőben más, mint amit te állítottál.

*: a tökéletesen túlzás, tudom. a példa szempontjából azonban lényegtelen a különbség.
--
blogom