Bonsoir tout le monde,

Voici mon problème: je développe sur XE7 et lorsque j'appelle la méthode free de ma classe, l'objet reste en mémoire et finit par provoquer des erreurs de ressources insuffisantes.
Je libère bien tous les membres dans le destructeur, puis je les force à nil (car ils sont toujours là qd j'évalue le code) mais sans succès
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
35
36
37
38
39
 
type tclasse1=class(tObject)
private
  fattribut1:int;
public
   destructor destroy;override;
   constructor create;
end;
 
type tclasse2=class(tObject)
private
  fattribut2:tclasse1;
public
   destructor destroy;override;
   constructor create;
end;
 
constructor tclasse1.create;
begin
 fattribut1=1;
end;
 
constructor tclasse2.create;
begin
 fattribut2=tclasse1.create;
end;
 
destructor tclasse2.destroy;
begin
 if fattribut2<>nil then
    fattribut2.free;
end;
 
procedure test;
var variable:Tclasse2;
begin
    variable:=Tclasse2.create;
    variable.free;
end;
Dans cet exemple, à la fin de la procédure test, l'attribut variable.fattribut2 est bien à nil mais variable n'est pas libéré alors que ce devrait être le cas.

Avez-vous une piste?