Bonjour, lorsque l'on crée un module de classe, il faut toujours créer les fonctions Class_Initialize (que j'assimile à un constructeur par défaut) et Class_Terminate (que j'assimile au destructeur de la classe). J'ai fait pas mal de C++ donc j'utilise ce vocabulaire.

Dans des tutoriels, je lis très souvent qu'après chaque "new" il faut faire un libérer la mémoire (en gros set mon_truc = nothing).

J'ai une classe qui contient pas mal de dictionnaires, de "new" vers d'autres classes etc..., du coup mon destructeur ressemble à ceci :

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 
'destructeur
Private Sub Class_Terminate()
 
Dim usine As Variant
Dim pvt As Variant
Dim cad As Variant
Dim nomMoule As Variant
Dim cai As Variant
Dim indicePP04 As Variant
 
Set wb_ = Nothing
Set ws_ = Nothing
 
'destruction de l'attribut planProd_
For Each usine In planProd_.keys
    For Each pvt In planProd_(usine).keys
        For Each cad In planProd_(usine)(pvt).keys
            Set planProd_(usine)(pvt)(cad) = Nothing
        Next cad
        Set planProd_(usine)(pvt) = Nothing
    Next pvt
    Set planProd_(usine) = Nothing
Next usine
Set planProd_ = Nothing
 
'destruction de l'attribut tonnageAvantPIPO_
For Each usine In tonnageAvantPIPO_.keys
    Set tonnageAvantPIPO_(usine) = Nothing
Next usine
Set tonnageAvantPIPO_ = Nothing
 
'destruction de l'attribut dicoNbMoules_
For Each usine In dicoNbMoules_.keys
    Set dicoNbMoules_(usine) = Nothing
Next usine
Set dicoNbMoules_ = Nothing
 
'destruction de l'attribut dicoComplementNbMoules_
For Each usine In dicoComplementNbMoules_.keys
    For Each nomMoule In dicoComplementNbMoules_(usine).keys
        Set dicoComplementNbMoules_(usine)(nomMoule) = Nothing
    Next nomMoule
    Set dicoComplementNbMoules_(usine) = Nothing
Next usine
Set dicoComplementNbMoules_ = Nothing
 
'destruction de l'attribut dicoChargeMoules_
For Each usine In dicoChargeMoules_.keys
    For Each nomMoule In dicoChargeMoules_(usine).keys
        Set dicoChargeMoules_(usine)(nomMoule) = Nothing
    Next nomMoule
    Set dicoChargeMoules_(usine) = Nothing
Next usine
Set dicoChargeMoules_ = Nothing
 
'destruction de l'attribut dicoComplementCapaMoule_
For Each usine In dicoComplementCapaMoule_.keys
    For Each cai In dicoComplementCapaMoule_(usine)
        Set dicoComplementCapaMoule_(usine)(cai) = Nothing
    Next cai
    Set dicoComplementCapaMoule_(usine) = Nothing
Next usine
Set dicoComplementCapaMoule_ = Nothing
 
'destruction de l'attribut planProdIndicePP04_
For Each usine In planProdIndicePP04_.keys
    For Each cad In planProdIndicePP04_(usine).keys
        For Each indicePP04 In planProdIndicePP04_(usine)(cad).keys
            Set planProdIndicePP04_(usine)(cad)(indicePP04) = Nothing
        Next indicePP04
        Set planProdIndicePP04_(usine)(cad) = Nothing
    Next cad
    Set planProdIndicePP04_(usine) = Nothing
Next usine
Set planProdIndicePP04_ = Nothing
 
End Sub
Si je mets tout ce code en commentaire, je m'aperçois que les autres fonctions Class_Terminate sont quand même appelées. A quoi bon se "fatiguer" à coder un tel destructeur ? De plus, puis-je le raccourcir de la manière suivante :
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
 
'destructeur
Private Sub Class_Terminate()
 
Set wb_ = Nothing
Set ws_ = Nothing
 
'destruction de l'attribut planProd_
Set planProd_ = Nothing
 
'destruction de l'attribut tonnageAvantPIPO_
Set tonnageAvantPIPO_ = Nothing
 
'destruction de l'attribut dicoNbMoules_
Set dicoNbMoules_ = Nothing
 
'destruction de l'attribut dicoComplementNbMoules_
Set dicoComplementNbMoules_ = Nothing
 
'destruction de l'attribut dicoChargeMoules_
Set dicoChargeMoules_ = Nothing
 
'destruction de l'attribut dicoComplementCapaMoule_
Set dicoComplementCapaMoule_ = Nothing
 
'destruction de l'attribut planProdIndicePP04_
Set planProdIndicePP04_ = Nothing
 
End Sub
Y a-t-il un risque que la mémoire ne soit pas totalement libérée (donc qu'un "pointeur" ne soit pas remis à nothing (ou NULL en C++)) ?

Merci bcp

Bonne journée