Can someone help me? I use a TObjectDictionary<integer,TmesData> with doOwnsValues, but if I remove an object via .Remove(key) my destructor does not get called. My class declaration:
TmesData = class
private
procedure socketDataAvailable(Sender: TObject; ErrCode: Word);
public
payload: string;
sendCount: integer;
sendSocket: TWSocket;
log: ts;
sendTime: tdatetime;
constructor create(alog: ts; const ip,port,apayload: string);
destructor Destroy; //close and free socket
function doConnect():boolean;
function doSend():integer;
end;
On my form I do
//create sendList
sendList:=TObjectDictionary<integer,TmesData>.Create([doOwnsValues]);
// add objects
sendlist.Add(strtoint(seq),TmesData.create(doLog,edIP.Text,edPort.Text,mes))
later I do processing with
for var seq in sendlist.Keys do
begin
//do processing
//...
//remove current object after processing
sendlist.Remove(seq);
end;
The destructor of my TmesData objects never gets called. I must miss something obvious.