XL 2016 Variable objet non déclarée et libération de la mémoire

dionys0s

XLDnaute Impliqué
Bonjour le forum,

avant de poser ma question, voici quelques "données" :

Soit le code de ma classe "cls_FSO" suivant :
VB:
Option Explicit

Private mscrFSO As Scripting.FileSystemObject

Private Sub Class_Initialize()
  Set mscrFSO = New Scripting.FileSystemObject
End Sub

Private Sub Class_Terminate()
  Set mscrFSO = Nothing
End Sub

Puis voici le code appelant cette classe :
VB:
Public Function UneFonction(ByRef UnArgument As String) As Boolean

  With New cls_FSO
    'du code
  End With

End Function

Comme on voit dans le code appelant, la classe n'est pas utilisée par une variable dimensionnée "proprement", mais juste instanciée à l'aide de With New ... puis "détruite" avec "End With" : en effet, si j'exécute la macro en pas à pas détaillé (F8), en passant sur "End With", ça déclenche la Sub Class_Terminate de la classe. J'en déduis donc qu'elle est détruite "correctement".

Ma question est la suivante : en est-il de même avec les objets natifs ? Dans le code suivant, peut on considérer l'objet créé comme proprement "détruit" après exécution ?
VB:
Public Function IsFolder(ByRef FullName As String) As Boolean

  With New Scripting.FileSystemObject
    On Error Resume Next
      Let IsFolder = Not IsError(.GetFolder(FullName))
    On Error GoTo 0
  End With

End Function

D'avance merci pour vos réponse !
Bonne journée à tous,

dionys0s
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Oui.
Les variables et zones de travail locales sont toujours détruites proprement que ce soient des objets ou des tableaux.
Les propriétés et variables Private de classes aussi d'ailleurs à la destruction de l'exemplaire. Votre Sub Class_Terminate ne sert à rien à mon avis. La mémoire d'un exemplaire d'objet est récupérée dès qu'il n'existe plus aucun pointeur qui s'y réfère. Il faut toutefois se méfier, dans certains cas, de pointeurs qui peuvent subsister dans des collections. Je pense à la collection UserForms, mais aussi à des collections que vous créeriez vous comme membre d'une classe… Si vous définissez la même à chacun de ses membres comme étant une de ses propriétés, si vous ne vous en êtes pas mis de coté une copie, elle n'existera que tant qu'un de ses membre est utilisé !
Il n'y a qu'avec des variables globales de modules standard qu'il faut faire attention à ne plus encombrer la mémoire de choses qui ne servent plus.
 
Dernière édition:

Discussions similaires

Réponses
29
Affichages
918

Statistiques des forums

Discussions
312 201
Messages
2 086 166
Membres
103 151
dernier inscrit
nassim