( Andrei | 2016. 01. 17., v – 21:31 )

1. Ha hibas a destruktorod nyilvan rossz az osztaly, nincs mit kezdeni. Felteve, hogy ezt a feladatot meg tudja oldani valaki *egyszer*.
2.

void foo {
auto os = std::make_shared("foo.txt");
// vagy auto os = std::make_unique("foo.txt");
// vagy szimplan std::ofstream os("foo.txt");
}

Milyen potencialis elbaszasi forrast latsz ezen a kodon? Marpedig ez a kod garantalja neked, hogy a scope lezarasakor az stream bezarul es a memoria felszabadul.

Volt egy ezzel analog forraskod idevagva, ami kb. 6-10 sor volt, es agyrem. Egy csomo realis peldat tudok mondani neked arra, hogy hol lehet elrontani oket figyelmetlenseg/faradtsag/tudatlansag miatt (es minden egyes helyen szamit, ahol hasznaljak az osztalyt). Es ami a legrosszabb, hogy a hiba egyaltalan nem trivialis, a kovetkezmenyei kiszamithatatlanok. Lehet, hogy tesztelesnel minden fasza, kesobb meg leterdel a program...

Nem azt mondom, hogy ez megoldhatatlan problema, nem azt mondom, hogy a Java hasznalhatatlan emiatt. Egyaltalan nem. Azt mondom, hogy ebben a konkret esetben a c++ megoldas biztonsagosabb. Es ezt az rc es a stack alapu RAII tesz lehetove.