powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Правильная проверка объекта на существование, альтернатива Assigned(...
62 сообщений из 62, показаны все 3 страниц
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081357
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня,

столкнулся с ошибкой в чужом коде, попыткой вызвать Free у несуществующего объекта. Перед этим проводится проверка через Assigned(...) и проверку проходит.
Возник вопрос, как правильно проверить обьект на существование? <> nil не подходит, Аssigned( тоже.

Спасибо
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081364
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак. Нужно просто знать поток выполнения программы и время жизни объекта в ней.

PS: Для объектов с неопределённым временем жизни применяют счётчики ссылок (и
синхронизацию если многопоточность).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081366
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно правильно уничтожать объект. Например, с помощью FreeAndNil()
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081368
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun> Возник вопрос, как правильно проверить обьект на существование?

А что значит "проверить обьект на существование" ?

hlopotun> <> nil не подходит, Аssigned( тоже.

Почему же, для проверки переменной вполне сгодится.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081374
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
попыткой вызвать Free у несуществующего объекта. Перед этим проводится проверка через Assigned(...) и проверку проходит.
Для вызова Free никакие проверки не нужны. Все уже реализовано в самой Delphi
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081399
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun,

для вызова Free никакие проверки не нужны. а вот несуществующий объект должен иметь адрес nil всегда
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081409
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun,

попробуйте заменить в этом проекте где возможно xyz.Free на FreeAndNil(xyz)
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081426
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам

.......
А что значит "проверить обьект на существование" ?
.......

был он создан через Create или нет.
В данном случае просто устранил проблему инициализировав переменную с nil сразу после обьявления.
Была мысль что если система понимает в момент вызова что объект не сушествует и происходит обращение к чужой памяти то логично было бы иметь возможность определить это из программы тоже не вызывая исключения.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081430
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun

В данном случае просто устранил проблему инициализировав переменную с nil сразу после обьявления.

А что, сразу после объявления она не nil ?
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081434
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
02.07.2021 15:43, DimaBr пишет:
> А что, сразу после объявления она не nil ?

смотря где объявлять
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081439
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun> был он создан через Create или нет.

А как ещё можно его создать?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081441
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам
hlopotun> был он создан через Create или нет.

А как ещё можно его создать?

можно просто не создать или не вернуть итп тут как раз это и произошло.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081491
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hlopotun,

Все предложенные способы Free, FreeAndNil Не будут работать, так как если на объект ссылаются из разных мест по указателю,
То во всех этих местах, кроме владельца из которого объект дестроится, останется мусорный указатель, который нет возможности проверить на корректность.
Я в своем приложении использую регистрацию объектов, на которые нужно безопасно ссылаться, а объект, который ссылается хранит не указатель, а индекс в этом реестре. Объект, на который ссылается, при дестрое удаляет себя из этого реестра. Объект, который ссылается, при обращении по индексу на сдестроенный объект, гарантированно получит nil.
Бывают и другие схемы, например объект хранит список ссылок на объекты, которые он должен оповестить о дестрое, но они более ресурсоемкие. Подозреваю что ссылки с атрибутом [weak] в новых версиях реализованы под капотом так. В ненагруженном приложении можно использовать такой вариант.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081502
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2> Объект, на который ссылается, при
swame2> дестрое удаляет себя из этого реестра.

До или после удаления? И сам (в деструкторе)
или некий удалятор (класс-хранитель, видимо) ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081508
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,

В своем деструкторе.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081512
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2,

Чего только люди не придумают, чтобы интерфейсы не пользовать...
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081532
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2> В своем деструкторе.

И что, невозможна ситуация, когда часть деструктора отработала,
а до удаления из реестра дело не дошло (или наоборот)?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081554
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,

>>Чего только люди не придумают, чтобы интерфейсы не пользовать...

Интерфейсы тут вообще не при чем. Ссылка на интерфейс может также иметь мусорный указатель, особенно плохо что такие ошибки нестабильно воспроизводятся. На днях как раз правил чужой баг с запомненным указателем на интерфейс сдестроенного объекта, проявлявшийся только на 1 компе. Стабильно воспроизводится только с FastMM в отладочном режиме.

Если имеется в виду наследники TInterfacedObject, когда когда объект дестроится только после того, как освобождены все ссылки, то в моем случае такой подход не приемлем, нужно по ходу работы нужно освобождать коллекции из сотен тысяч, миллионов объктов, а на какие из этих объектов ведут ссылки из десятков подсистем, отследить нереально. В результате утечек - да , не будет, но объекты будут висеть несдестроенными до конца работы приложения, память закончится.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081556
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,

swame2> В своем деструкторе.

И что, невозможна ситуация, когда часть деструктора отработала,
а до удаления из реестра дело не дошло (или наоборот)?

Наверное возможна теоретически, когда в деструкторе допущены грубые ошибки, но в моем приложении именно эта проблема за примерно 10 лет массового применения ни разу не возникала, ошибки в деструкторе, если есть, дадут знать о себе раньше.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081558
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2...объект, который ссылается хранит не указатель, а индекс в этом реестре...
...по ходу работы нужно освобождать коллекции из сотен тысяч, миллионов объктов...


В таком случае твой реестр должен постоянно расти из-за невозможности повторного использования индекса,
и в конце концов реестр может переполниться.

Как решается эта проблема?
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081561
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr Sharahov,

индекса int64 хватит на годы аптайм приложения. По столько его не используют.
Для большинства практических применений, с аптаймомом а несколько недель, хватит и Cardinal или integer.
Была мысль использовать разные реестры для разных документов, каждый со своим набором индексов.
Но в моем случае это влечет сложности, не решился делать.
Также используются свои реестры для разного типа объектов
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081562
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2
Aleksandr Sharahov,

индекса int64 хватит на годы аптайм приложения. По столько его не используют.
Для большинства практических применений, с аптаймомом а несколько недель, хватит и Cardinal или integer.
Была мысль использовать разные реестры для разных документов, каждый со своим набором индексов.
Но в моем случае это влечет сложности, не решился делать.
Также используются свои реестры для разного типа объектов


Можно подробнее:
- как объявлен реестр?
- как он расширяется?
- сколько объектов в день создается?
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081563
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr Sharahov,

Так реестр

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
  TUIDHeap = class (TRDictionary<longword,TObject>)
  private
    FLastID: IDUID;
    FLock: TCriticalSection;
    TotalTypesCounter: TClassStat;
    procedure ShowLeaks;
  protected
    function GetID (AItem: TObject): integer;
  public
    constructor Create(aUseTotalCounter: Boolean); reintroduce; virtual;
    destructor Destroy; override;
    procedure LockList; inline;
    procedure UnLockList; inline;
    procedure Add(O: TObject); overload;
    procedure AddUnique(O: TObject);
    procedure Add(AUID: IUID); overload;
    procedure Add(AUID: IUID; OUID: TObject); overload;
    procedure Remove(O: TObject);
    procedure IPut(const P: LongWord; O: TObject);
    function GetTByID<T:class> (const ID: IDUID): T; inline;
    function Contains (const AUID: IUID): boolean;
    function GetByID(const ID: IDUID): TObject; overload; //inline;
    function NextID: IDUID;
    function Print: string;
    function PrintCounts: string; //override;
  end;




Так ссылка на объект

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
  TIDHeapRef<T:class> = record
  private
    FUID: int64;
    function GetObject: T;
    procedure SetObject(const Value: T);
  public
    constructor Create (const UID: int64); overload;
    constructor Create (const intfUID: IUID); overload;
    procedure Clear;
    procedure FreeObject;
    function A: boolean;
    function NA: boolean;
    function AO(var Obj:T): boolean;
    function GetInterface (const IID: TGUID; out Obj): Boolean;
    class operator Implicit(ref: TIDHeapRef <T>): T;
    class operator Implicit(Obj: T): TIDHeapRef <T>;
    class operator Implicit(ref: TIDHeapRef <T>): Boolean;
    class operator LogicalNot(ref: TIDHeapRef <T>): Boolean;
    class operator LogicalAnd(a: TIDHeapRef <T>; b: Boolean): Boolean;
    class operator LogicalAnd(a: Boolean; b: TIDHeapRef <T>): Boolean;
    class operator LogicalOr(a: TIDHeapRef <T>; b: Boolean): Boolean;
    class operator LogicalOr(a: Boolean; b: TIDHeapRef <T>): Boolean;
    class operator Equal(a, b: TIDHeapRef <T>): boolean; overload;
    class operator Equal(a: TIDHeapRef <T>; b: T): boolean; overload;
    class operator Equal(a: T; b: TIDHeapRef <T>): boolean; overload;
    property O: T read GetObject write SetObject;
    property ID: int64 read FUID;
  end;


...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081564
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr Sharahov,

>> сколько объектов в день создается?

В документе от нескольких десятков тысяч до нескольких миллионов объектов.

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

Есть клиент, в нем может быть открыто одновременно до нескольких десятков документов, пока хватает памяти в 3Гб 32 битного клиента, аптайм несколько дней-недель. Документы могут открывать - закрывать наверное десятки раз в день. Время открытия большого документа, который на миллионы объектов 10-20 сек.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081565
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2,

ясно, я как раз хотел порекомендовать использовать хеш-таблицу
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081567
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr Sharahov,

Используется хэш таблица от Soft 4 you, она в несколько раз быстрее стандартной.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081568
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2,

ну, я знаю варианты побыстрее ))
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081569
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr Sharahov,

Возможно, тесты делались во времена D 10.1
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081571
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2021, дельфисты изобрели GC =)

Осталось изобрести сопутствующие GC технологии, многим из которых овер 20 лет.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081572
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Siemargl,

>>2021, дельфисты изобрели GC =)
>>Осталось изобрести сопутствующие GC технологии, многим из которых овер 20 лет.

А те, у кого есть GC, на нагруженных приложениях понимают, что он не подходит,
ищут способы обхода и изобретают ручное управление памятью.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081574
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2
Siemargl,

>>2021, дельфисты изобрели GC =)
>>Осталось изобрести сопутствующие GC технологии, многим из которых овер 20 лет.

А те, у кого есть GC, на нагруженных приложениях понимают, что он не подходит,
ищут способы обхода и изобретают ручное управление памятью.

Т.е ты до конца не дочитал, или не понял...
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081576
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
- А не удалить ли мне вон тот объект? А вдруг он уже удален?
...как вообще такие вопросы могут возникнуть? Программист "под грибами"?
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081583
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может, что-то вроде in memory database
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081584
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут однозначно надо задействовать интерфейсы и weak атрибут. Собственно, это штатная реализация того велосипеда, который вы изобретаете.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081585
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zedxxx,

штатная реализация - работать с объектами через идентификаторы
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081586
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr Sharahov, Если сложно вручную отследить время жизни объекта, лучше доверить это дело машине.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081587
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zedxxx,

мне не сложно, и да, у меня это делает машина )
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081623
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl
2021, дельфисты изобрели GC =)

Осталось изобрести сопутствующие GC технологии, многим из которых овер 20 лет.


Интерфейсы в делфях были всегда, если что. Кому нужен GC - их юзает.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081634
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon
Siemargl
2021, дельфисты изобрели GC =)

Осталось изобрести сопутствующие GC технологии, многим из которых овер 20 лет.


Интерфейсы в делфях были всегда, если что. Кому нужен GC - их юзает.
Интерфейсы это подсчет ссылок так то. Это другая технология.

Блин, расширяйте кругозор!

ЗЫ. Я не совсем точен, изобретение @swame2 это не совсем GC, тому отдельный массив не требуется, это GC на костылях.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081636
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

я в курсе. результат такой же как у @swame2, +-
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081658
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Siemargl,

>>ЗЫ. Я не совсем точен, изобретение @swame2 это не совсем GC, тому отдельный массив не требуется, это GC на костылях.

Это вообще не GC и к нему отношения не имеет.
Цель совсем другая, обработка зависших указателей в условиях ручного управления памятью,
без попыток автоматического освобождения, так как в моем случае от него был бы только вред.
Читай внимательно.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081660
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если жизненный цикл объекта не известен ... это плохо.
FreeAndNil призвана облегчить жизнь незнающим.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081667
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2> без попыток автоматического освобождения,
swame2> так как в моем случае от него был бы только вред.

А с чего бы это? Учёт ссылок тоже не ведётся никак?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081673
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,

Учет ссылок - что это? Объекты дестроятся свои владельцем. Но на объект могут ссылаться и другие объекты, не являющиеся его владельцам и не обязательно выгружаемые при выгрузке этого объекта их памяти. В этом случае ссылка должна обнулиться.

Приложение сильно нагружено по памяти. Нужно в контролируемые моменты времени выгружать большие документы (миллионы объектов, сотни мегабайт) и на их место загружать новые. Коллектор освободил бы память в понятный ему момент времени, т.е. неконтролируемо. Память осталась занятой, надо гадать чем именно.
Но если на объект есть ссылка, т.е. при использовании старого ARC с интерфейсами такие объекты , на которые есть ссылки, не будут освобождены, и по цепочке не будут освобождены другие объекты. Да в старом ARC было извратиться, вручную настраивая счетчики ссылок, перекрывая AddRef / Release . И в нормальном GC это можно отрегулировать настройками атрибутов ссылок. Но неужели это проще, чем аккуратно расставить Free в пару c Create? Для меня c последним как-то проблем не возникало.
Weak ссылки? Они появились недавно , а проблему нужно было решать задолго до них.
Не думайте что я такой дурачок-велосипедостроитель. Ваши технологии с интерфейсами и подсчетами ссылок я применял 20-15 лет назад. Но когда объемы документов стали расти быстрее, чем доступная память в компе, стало понятно что все они не годятся, так как сжирают память и скорость. Все это давно повыкидывали из нагруженных мест кода.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081677
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2
Weak ссылки? Они появились недавно
Недавно атрибут [weak] стал неактуален))))
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081678
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Недавно атрибут [weak] стал неактуален))))

Для интерфейсов он всё ещё актуален, только есть нюанс...
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081679
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asutp2,

>>Недавно атрибут [weak] стал неактуален))))

Да, Windows и Android надо рассматривать отдельно. Я в основном по Windows
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081686
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hlopotun
Гаджимурадов Рустам

.......
А что значит "проверить обьект на существование" ?
.......

был он создан через Create или нет.
В данном случае просто устранил проблему инициализировав переменную с nil сразу после обьявления.
Была мысль что если система понимает в момент вызова что объект не сушествует и происходит обращение к чужой памяти то логично было бы иметь возможность определить это из программы тоже не вызывая исключения.

Уничтожая объект (или как тут выражаются некие явно не русские "дестроите") вы лишь сообщаете ОС, что та память, которую занимал объект вам больше не нужна. А ОС уже сама решает что с ней делать. Отдать другому процессу или погодить. А вдруг вам она снова понадобится!
Ну это так в добавок к уже сказанному.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081687
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
northener
hlopotun
пропущено...

был он создан через Create или нет.
В данном случае просто устранил проблему инициализировав переменную с nil сразу после обьявления.
Была мысль что если система понимает в момент вызова что объект не сушествует и происходит обращение к чужой памяти то логично было бы иметь возможность определить это из программы тоже не вызывая исключения.

Уничтожая объект (или как тут выражаются некие явно не русские "дестроите") вы лишь сообщаете ОС, что та память, которую занимал объект вам больше не нужна. А ОС уже сама решает что с ней делать. Отдать другому процессу или погодить. А вдруг вам она снова понадобится!
Ну это так в добавок к уже сказанному.

"Уничтожая" объект, ты обращаетесь лишь к диспетчеру памяти твоей программы. Не факт, что дело скоро дойдет до ОС. Вдобавок к добавку.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081688
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ
northener
пропущено...

Уничтожая объект (или как тут выражаются некие явно не русские "дестроите") вы лишь сообщаете ОС, что та память, которую занимал объект вам больше не нужна. А ОС уже сама решает что с ней делать. Отдать другому процессу или погодить. А вдруг вам она снова понадобится!
Ну это так в добавок к уже сказанному.

"Уничтожая" объект, ты обращаетесь лишь к диспетчеру памяти твоей программы. Не факт, что дело скоро дойдет до ОС. Вдобавок к добавку.

Не спорю. Но обрати внимание на уровень вопроса ТС. Я свой топик обращал именно к нему.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081712
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2
Но на объект могут ссылаться и другие объекты, не являющиеся его владельцам и не обязательно выгружаемые при выгрузке этого объекта их памяти. В этом случае ссылка должна обнулиться.
Механизму notifications в TComponent сто лет в обед.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081715
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barmaley57,

В курcах что в столетнем механизме 1 получатель сообщения?
И подписка на каждый вид события в каждом экземпляре это 8 байт?
Ну и в результате получаем такую же ситуацию наоборот - если подписчик разрушен раньше посылающего, получаем такой же эксепшен.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081716
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
swame2
Weak ссылки? Они появились недавно , а проблему нужно было решать задолго до них.

Ну раз проблема до сих пор не решена, может стоит начать их использовать?
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081718
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zedxxx,

Weak решают одну из проблем автоосвобождения, за которое здесь многие топят, рассматриваемую проблему зависших ссылок никак не решает.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081721
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
swame2, Если бы не было проблем, то и топик бы такой не появился. Так что - не решена.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081725
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
swame2, Зависших ссылок при этом попросту не будет. Или вы не понимаете как оно работает?
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081731
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zedxxx,

Почему МНЕ не подходит автоосвобождение через интерфейсы и подсчет ссылок -
я уже объяснял в ответе Гаджимурадову Рустаму,

Опять меня считают нубом-невежей.
Кому подходит автоосвобождение - пусть лечат его недостатки Weak.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081732
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
swame2, Проблема в быстродействии механизма подсчёта ссылок?

Вы в ответе описали ситуацию до появления weak атрибута, которым не могли тогда воспользоваться.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081741
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zedxxx
swame2, Проблема в быстродействии механизма подсчёта ссылок?

Вы в ответе описали ситуацию до появления weak атрибута, которым не могли тогда воспользоваться.


Согласен, упомянул о них в общей куче.
Они мне по любому не подошли бы, потому что работают только со ссылками интерфейсами, а интерфейсы слишком прожорливы.
Что там под капотом [weak] я не смотрел, но представляю сколько там должно быть дополнительной работы и памяти.
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081744
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2
В курcах что в столетнем механизме 1 получатель сообщения?

Полагаю, речь не о событиях, а о FreeNotification.

swame2
а интерфейсы слишком прожорливы

Вот это поворот...

swame2
Что там под капотом [weak] я не смотрел, но представляю сколько там должно быть дополнительной работы и памяти

Под капотом там глобальная хеш-таблица с адресами переменных (слабых ссылок).
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081768
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
swame2
В курcах что в столетнем механизме 1 получатель сообщения?

Полагаю, речь не о событиях, а о FreeNotification.
Верно. И как только несчастная IDE все это время работает с компонентами?!))
...
Рейтинг: 0 / 0
Правильная проверка объекта на существование, альтернатива Assigned(...
    #40081783
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barmaley57,

Kazantsev Alexey
swame2
В курcах что в столетнем механизме 1 получатель сообщения?

Полагаю, речь не о событиях, а о FreeNotification.

Это вообще ужас. Там внутри лист подписчиков. Лет 15 назад ровно такой механизм втихую вкосячил в объекты один знаток "типовых решений" для решения одной очень локальной проблемы. И я разбирался, почему расход памяти вырос на треть, а документ стал закрываться по 3 секунды вместо нескольких десятков миллисекунд.

>>Верно. И как только несчастная IDE все это время работает с компонентами?!))

Так зашибись работает, что обычная форма на сотню компонент открывается в дизантайме на моем компе с Ryzen 3600 по несколько секунд.
Это для вас незнакомая картина?
А в моих документах аналогичных графических компонентов от сотни до сотен тысяч.
...
Рейтинг: 0 / 0
62 сообщений из 62, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Правильная проверка объекта на существование, альтернатива Assigned(...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]