В этом коменте рекомендуется статья, которая говорит, что это не совсем так. Насколько я из нее понял, объект может быть финализирован даже во время выполнения его же метода, если в этом методе осуществляется обращение к неуправляемому коду.
Я так понимаю, что если обернуть Wrapper wr в using, то тем самым мы гарантируем существование объекта до конца блока using (т.к. в конце блока автоматически вызывается Dispose, вызов которого требует наличие объекта). То есть до конца блока функции не гарантируется, что объект не будет финализирован, а внутри блока using гарантируется, что объект не будет финализирован до конца блока. То есть конструкция using { x = new x();} разворачивается не в конструкцию
try { x = new x(); } finally { x.Dispose(); }
а в конструкцию
try { x = new x(); } finally { x.Dispose(); GC.KeepAlive(x); }
В копилку:
в конце объявления класса/структуры ставь; — или потом хрен найдешь где ошибка
std::list<std::list > — не забудь пробел!
itoa, atoi, _itoa, _atoi, _itoa_s, _i64toa, ui64toa, _ui64tow, _ultoa_s, WideCharToMultyByte(CP_UTF8, 0, str, len, 0, 0, 0, 0), null-terminated strings убейся
шаблонную функцию практически нельзя перенести в cpp
дружественные классы и операторы ввода/вывода, их перегрузка
и тд и тп
try { x = new x(); } finally { x.Dispose(); }
а в конструкцию
try { x = new x(); } finally { x.Dispose(); GC.KeepAlive(x); }
Это верно?
в конце объявления класса/структуры ставь; — или потом хрен найдешь где ошибка
std::list<std::list > — не забудь пробел!
itoa, atoi, _itoa, _atoi, _itoa_s, _i64toa, ui64toa, _ui64tow, _ultoa_s, WideCharToMultyByte(CP_UTF8, 0, str, len, 0, 0, 0, 0), null-terminated strings убейся
шаблонную функцию практически нельзя перенести в cpp
дружественные классы и операторы ввода/вывода, их перегрузка
и тд и тп