powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Фокусы от TObjectList
10 сообщений из 10, страница 1 из 1
Фокусы от TObjectList
    #39734013
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот класс
Код: 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.
29.
30.
31.
32.
33.
34.
...
type
  TMyObject = class(TObject)
    private
      FI: Integer;
      FObj: TObject;
    public
      constructor Create;
      destructor Destroy; override;
      procedure SetI(AValue: Integer);
      property I: Integer read FI write SetI;
  end;

implementation

{ TMyObject }

constructor TMyObject.Create;
begin
  inherited;
  FObj := TObject.Create;
end;

destructor TMyObject.Destroy;
begin
  FreeAndNil(FObj);
  inherited;
end;

procedure TMyObject.SetI(AValue: Integer);
begin
  FI := AValue;
end;
...


Вот его добавление в дженерик типа TObjectList:


В чём моя вина? Я хочу чтобы TObjectList уничтожал свои айтемы как следует. Для того и написал ObjList := TObjectList<TMyObject>.Create( True ). Что на самом деле он творит? Чего я не понимаю?
...
Рейтинг: 0 / 0
Фокусы от TObjectList
    #39734022
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JagareВ чём моя вина? Я хочу чтобы TObjectList уничтожал свои айтемы как следует. Для того и написал ObjList := TObjectList<TMyObject>.Create( True ). Что на самом деле он творит? Чего я не понимаю?
Вина в том, что TObjectList ничего не знает про переменную TMyObj и, соответственно, после ObjList.Clear она становится не валидной, но пока в другом месте программы этот участок памяти не будет использован повторно, то по адресу в ней будут лежать данные исходного объекта.
...
Рейтинг: 0 / 0
Фокусы от TObjectList
    #39734029
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp, то есть всё в порядке, память свободна?
...
Рейтинг: 0 / 0
Фокусы от TObjectList
    #39734033
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jagarealekcvp, то есть всё в порядке, память свободна?
Какая версия дельфей? Если новая (XE+), то в проекте первой строчкой вставьте
Код: pascal
1.
  ReportMemoryLeaksOnShutdown := True;


и запустите программу, тогда в конце она скажет - свобдона или нет.
Если дельфи старая, то надо скачать и подключить к проекту FastMM и потом то же самое.

Вкратце: да, память свободная.
...
Рейтинг: 0 / 0
Фокусы от TObjectList
    #39734034
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Туплю, там же дженерики :)
...
Рейтинг: 0 / 0
Фокусы от TObjectList
    #39734043
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jagare, если у TObjectList OwnsObjects стоит true, то при вызове методов удаления объектов TObjectList будет вызывать деструктор объектов, добавленных в него. Это вы легко можете проверить, поставив брейкпоит в деструкторе объекта TMyObject. То, что переменная не nil, так её в этот nil никто не установил.
Jagareто есть всё в порядке, память свободна? Да. FreeAndNil(MyObj) не нужно вызывать.
...
Рейтинг: 0 / 0
Фокусы от TObjectList
    #39734051
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jagare,

авторЧего я не понимаю?
скорее всего ты видишь мусор разрушенного объекта
...
Рейтинг: 0 / 0
Фокусы от TObjectList
    #39734054
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp, так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
begin
  ReportMemoryLeaksOnShutdown := True;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Так сделал, ничего не говорит
...
Рейтинг: 0 / 0
Фокусы от TObjectList
    #39734055
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все впорядке, просто отдельная ссылка на объект указывает на память, которую еще не успели засорить. Кстати, true в create можно не писать. Clear перед freeandnil можно не вызывать.
...
Рейтинг: 0 / 0
Фокусы от TObjectList
    #39734060
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам себя задурил! Благодарю всех за ответы)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Фокусы от TObjectList
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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