Информация об изменениях

Сообщение Реализация слабых ссылок от 18.05.2019 14:21

Изменено 20.05.2019 8:30 es3000

Реализация слабых ссылок
Здравствуйте!

В ходе обсуждения различных моментов при разработке программы, пришли к выводу, что нужны "слабые" ссылки.
Но в моей среде разработки есть только обычные "жесткие" ссылки.

Помогите, пожалуйста, реализовать самодельный механизм слабых ссылок.

Как я понимаю, должно быть три класса:
1) Класс "Map", который хранит обычную ссылку на объект и его ИД-шник.
2) Класс "WeakRef", которая хранит только ИД объекта.

А как будет удаляться объект из Map, когда он становится больше не нужным?

Получается, нужен специальный метод DeleteFromMap(), который удаляет объект из Map.
То есть нужен базовый класс TWeakBase, у которого реализован этот метод.
И все классы, для которых нужно использование "слабых" ссылок, надо наследовать от этого TWeakBase.

Правильно?

Но тогда получается, что для других классов, не унаследованных от TWeakBase, использование "слабых" ссылок будет невозможно.
Хотелось бы, чтобы и для встроенных классов также можно было использовать слабые ссылки.

Как быть?
Как лучше сделать?

ПС.
Да, я ошибся с разделом.
Моя среда — это не современная .Net. В ней нету слабых ссылок.
Реализация слабых ссылок
Здравствуйте!

В ходе обсуждения различных моментов при разработке программы, пришли к выводу, что нужны "слабые" ссылки.
Но в моей среде разработки есть только обычные "жесткие" ссылки.

Помогите, пожалуйста, реализовать самодельный механизм слабых ссылок.

Как я понимаю, должно быть три класса:
1) Класс "Map", который хранит обычную ссылку на объект и его ИД-шник.
2) Класс "WeakRef", которая хранит только ИД объекта.

А как будет удаляться объект из Map, когда он становится больше не нужным?

Получается, нужен специальный метод DeleteFromMap(), который удаляет объект из Map.
То есть нужен базовый класс TWeakBase, у которого реализован этот метод.
И все классы, для которых нужно использование "слабых" ссылок, надо наследовать от этого TWeakBase.

Правильно?

Но тогда получается, что для других классов, не унаследованных от TWeakBase, использование "слабых" ссылок будет невозможно.
Хотелось бы, чтобы и для встроенных классов также можно было использовать слабые ссылки.

Как быть?
Как лучше сделать?

ПС.
Да, я ошибся с разделом.
Моя среда — это не современная .Net. В ней нету слабых ссылок.

Среда очень похожа на старый Visual Basic 6 из старой Visual Studio.
Никакой возможности напрямую управлять указателями и ссылками нету.
Также похоже на старый Delphi (до введения WeakRef).