Есть полу-нативный класс c++/c++-cli, который управляется из c#, при этом один из его элементов/составляющих классов, должен быть удален из памяти незамедлительно если ему было присвоено значение null
, и мне теперь непонятно, если экземпляр данного класса не будет уничтожен, то все приложение упадет в один миг. Ведь если верить GC
, то он удаляет экземпляр из памяти только в том случае когда он этого захочет, но мне необходимо именно удалить его в тот момент, когда было присвоено значение null
. Понимаю что есть метод Dispose()
, но его недостаточно, т.к. методы класса, и сам класс не должны быть доступны после их удаления, чего Dispose()
не гарантирует, а плевать в лицо исключениями, это затормозить работу приложения.
Можно ли перегрузить оператор присваивания так, что бы как только было передано значение null
, данные класс уничтожил ссылку на себя? Желательно без помощи GC
.
Вы не можете «уничтожить» экземпляр управляемого класса.
Присваивая ссылке null
, вы тем самым не обнуляете другие возможные ссылки на объект. Соответственно, по другим ссылкам объект будет всё ещё доступен. Вызов Dispose()
лишь позволяет объекту подчистить за собой, но это не приведёт к «запрету» другим объектам вызывать методы данного класса (и получать исключения). Обеспечить, чтобы у других объектов не было ссылок на ваш объект (или они были, но объекты ими бы не пользовались) — ваша задача.
Перегрузить оператор присваивания ссылки невозможно. Но даже если бы это было возможно, что бы вы в нём могли сделать? Те, у кого есть ссылка, будут всё ещё иметь эту ссылку.
Если это нативный класс, вы можете деаллоцировать его при помощи delete
по указателю на него, но вы должны обеспечить, чтобы те, у кого всё ещё есть указатель на данный объект, более не пользовались им. Иначе вы получаете undefined behavior.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Доброго времени суток всем! Недавно столкнулся с такой проблемой: необходимо разделить число типа float по разрядам, пример: "1590270,2018" -> "1 590 270,2018"Попытался...
Мне нужна помощь с написанием скрипта, который будет проверять числовое значение в поле