можно поместить в:
using (StreamWriter sr = new StreamWriter())
{ //тут sr есть
} //тут его нет, автоматически вызывается его высвобождение памяти, даже в случае ошибки.
А как поступить в c++? тупо блоки перехвата ошибок юзать, или есть подобная конструкция?
RAII
че за using A = new B?
Ближе всего unique_ptr, он удалит по выходу за scope.
В С++ для этого есть деструкторы
Во-первых, с с++ есть RAII и костыли типа using в C# там не нужны Во-вторых, в C# через using используются Disposable объекты, а не те, которые нужно удалять. Для удаления есть сборщик мусора
в c# тож есть деструкторы, но в случае ошибки они не вызываются. поэтому важно либо перехватывать, либо юзать такую конструкцию
Using declaration говорит, что на переменной вызовется метод Dispose в конце жизни переменной (не объекта)
В С# деструкторы вызываются при сборке мусора
худшая реализация псевдодеструктора из всех что я видел
Обычная реализация RAII лол
это последствия использования GC в языке, with в питоне по той же причине есть
{ auto sr = StreamWriter(); //тут sr есть } //тут его нет, автоматически вызывается высвобождение ресурсов (не только памяти), даже в случае ошибки.
Обсуждают сегодня