Я знаю, что перегрузка оператора присваивания невозможна в C # ... но возможно ли заблокировать оператор по умолчанию?
Ситуация: я разрабатываю сложный структурный редактор. Это позволит комбинировать множество объектов классов и связывать их вместе.
Чтобы сохранить эти ссылки и ссылки между экземплярами многих классов, мне нужно, чтобы у каждого экземпляра был уникальный идентификатор для всех классов. Я создал класс ID (включая ссылку на объект контейнера), чтобы справиться с этим. Чтобы убедиться, что идентификаторы уникальны, я сделал так, чтобы класс регистрировал все свои экземпляры в статическом list<idClass> IDRegister
и все ссылки на любой экземпляр идентификатора в статическом list<idClass> IDReferenceList
.
Проблема: при первичном назначении / создании нового экземпляра идентификатора для использования я регистрирую идентификатор в IDRegister
, эффективно создавая две ссылки на объект. Во время использования любого экземпляра класса теперь слишком легко перезаписать поле идентификатора другим (уже существующим или новым). Обычная перезапись в незарегистрированных объектах оставила бы экземпляр без ссылки, а сборка мусора позаботилась бы об очистке памяти. В этом случае ссылка на экземпляр в IDRegister
(и, возможно, несколько раз в IDReferenceList
) сохранит ID-экземпляр живым, а вместе с ним ссылки на возможно устаревшие объекты-контейнеры, предотвращающие их очистку. Все это оставит меня с огромной утечкой памяти в моей библиотеке.
Решение
Я не могу принять возможные утечки памяти в моей библиотеке. У меня есть два варианта: перейти на C ++ или найти способ предотвратить переопределение по умолчанию существующей ссылки на экземпляр ID.
или есть третий вариант?