Size: a a a

2021 March 26

МВ

Макс Воробьев... in dlang.ru
Dark Hole
А close сам программист может забыть вызвать...
а может не забыть, но где-нибудь до close вылетит exception
источник

МВ

Макс Воробьев... in dlang.ru
в итоге еще и в scope(exit) заворачивать
источник

DH

Dark Hole in dlang.ru
Макс Воробьев
в итоге еще и в scope(exit) заворачивать
А оно работает при exception?
источник

МВ

Макс Воробьев... in dlang.ru
Dark Hole
А оно работает при exception?
должно
источник

DH

Dark Hole in dlang.ru
Даже при фатальных?
источник

OB

Oleg B in dlang.ru
Dark Hole
А оно работает при exception?
да
источник

DH

Dark Hole in dlang.ru
(в смысле которых нельзя перехватить, ассертов например)
источник

OB

Oleg B in dlang.ru
scope (exit) — всегда
scope (failure) — при ошибках
scope (success) — когда всё ок
источник

OB

Oleg B in dlang.ru
Dark Hole
(в смысле которых нельзя перехватить, ассертов например)
вроде тож
источник

AB

Andrey Bukhanovsky in dlang.ru
Oleg B
gc деструктор класса может и не вызвать по итогу
вот именно это и интересно - на это можно забить или это надо отслеживать своими руками?
источник

AB

Andrey Bukhanovsky in dlang.ru
или это надо обходить огородами?
источник

DH

Dark Hole in dlang.ru
Andrey Bukhanovsky
вот именно это и интересно - на это можно забить или это надо отслеживать своими руками?
А зачем тебе деструктор?
источник

OB

Oleg B in dlang.ru
Dark Hole
(в смысле которых нельзя перехватить, ассертов например)
import std.stdio;

void foo(int x)
{
   scope (exit) stderr.writeln("exit");
   scope (failure) stderr.writeln("failure");
   scope (success) stderr.writeln("success");

   assert (x < 10);
}

void main()
{
   foo(5);
   foo(10);
}

выхлоп
success
exit
failure
exit
core.exception.AssertError@scope_exit.d(9): Assertion failure
----------------
??:? [0x446aa5]
??:? [0x452426]
??:? [0x4345ed]
??:? [0x42d18c]
??:? [0x40405c]
??:? [0x4041d7]
??:? [0x4342bb]
??:? [0x4341b7]
??:? [0x43400d]
??:? [0x404204]
??:? __libc_start_main [0x7f19700f5f42]
??:? [0x403f1d]
источник

OB

Oleg B in dlang.ru
Andrey Bukhanovsky
вот именно это и интересно - на это можно забить или это надо отслеживать своими руками?
что ты делаешь в деструкторе? почему тебя вообще беспокоит будет он вызван или нет?
источник

OB

Oleg B in dlang.ru
если ты о памяти под сам класс и его поля, то вообще не парься, это всё gc решает
источник

Е

Евгений in dlang.ru
Oleg B
gc деструктор класса может и не вызвать по итогу
Ну в конечном итоге таки вызовет. Например при завершении программы. 😄 Если коненчо оно не аварийно завершилось.
источник

AB

Andrey Bukhanovsky in dlang.ru
например, я размещаю ссылку на созданный объект в некоем массиве таких объектов. когда удаляется объет, надо эту ссылку из массива объектов удалить.
источник

OB

Oleg B in dlang.ru
Евгений
Ну в конечном итоге таки вызовет. Например при завершении программы. 😄 Если коненчо оно не аварийно завершилось.
именно что не факт, может и скипнуть как раз при завершении программы, ибо память система всё равно заберёт сама
источник

Е

Евгений in dlang.ru
Andrey Bukhanovsky
вот именно это и интересно - на это можно забить или это надо отслеживать своими руками?
Смотря какой ресурс
источник

Е

Евгений in dlang.ru
Oleg B
именно что не факт, может и скипнуть как раз при завершении программы, ибо память система всё равно заберёт сама
Эм, это точно?
источник