2013-12-14 3 views
3

У меня есть это определение типа:Как освободить память в этом случае?

KMenuClass = class 
    private 
     pMenuID: String; 
    public 
     property MenuID: String read pMenuID; 
     constructor Create(const paraMenuID: String); 
    end; 

Тогда я это сделать:

constructor KMenuClass.Create(const paraMenuID: String); 
begin 
    pMenuID:= paraMenuID; 
end; 

procedure TfrmPermissions.FormCreate(Sender: TObject); 
begin 
    clSetup.Items.AddObject('ant', KMenuClass.Create('a007')); 
    clSetup.Items.AddObject('cat', KMenuClass.Create('x123')); 

end; 

Вышеуказанные две записи Aer только те записи теста. Я действительно смотрю около 50 предметов. clSetup имеет тип TCheckListBox, и я в основном сохраняю вторую строку вместе с строкой .

я могу выводить определенный элемент, как это:

Var 
    ThisItem : KMenuClass; 
. 
. 
. 
    ThisItem := clSetup.Items.Objects[clSetup.ItemIndex] as KMenuClass; 

    ShowMessage(clSetup.Items[clSetup.ItemIndex] + ' : ' + ThisItem.MenuID); 

Но как я распоряжаюсь моих объектов, связанных с каждым элементом списка? Автоматически удаляется, когда я закрываю форму?

Спасибо!

ответ

1

Вручную повторение элементов items.objects, items.count и освобождение каждого объекта, вероятно, является единственным способом, поскольку свойство, вероятно, является tstrings и не имеет свойства ownsobjects (которое входит только в tstringlist).

+0

Благодарим за ответ. Я получаю вашу точку зрения, но, с любопытством, не так ли, если я ожидаю, что она будет самоуничтожаться, когда форма закрывается? – itsols

+0

Должен ли я использовать 'ThisIem.Free' или' ThisItem.FreeInstance'? – itsols

+0

Да, я предполагаю, что они не будут освобождены ближе. Система не знает, принадлежат ли они или ссылки. и. бесплатно –

Смежные вопросы