Здравствуйте, rg45, Вы писали:
scf>>Так выше приводили же пример на шарпе с using? Можно ограничить ресурс скоупом точно так же, как и в С++. R>Здесь два момента: R>1. Конструкция using полезна только в тех случаях, когда объект создается и уничтожается в рамках одного блока, что значительно беднее возможностей, предоставляемых плюсовым RAII;
Не совсем. Ничто не мешает создать "страж"-объект, который хранит ссылку на целевой. Что-то вроде unique_ptr в C++ с его возможностями reset() на новое значение и move владения. И это просто, хотя и нужно об этом позаботиться.
R>2. Криворукий юзер может тупо забыть написать "using", или наоборот, сделать это не там, где нужно, или не так, как нужно, не в той последовательности. Или напишет код так, что Dispose будет зваться в двух разных местах для одного и того же объекта. В общем, все те же "радости", что и для ручного управления памятью в C.
Лишний Dispose обычно не вредит. Пропустить с помощью стража и using — сложно.
А вот обеспечить для объекта, сидящего где-то глубоко в недрах иерархии, немедленное освобождение — вот тут, да, mission impossible.