juin
2007
Le C++/CLI dispose du template auto_handle pour forcer la destruction d’un objet quand il sort de portée (il fonctionne comme le template auto_ptr du C++).
Pour utiliser le template, on doit inclure :
#include <msclr\auto_handle.h>
Soit le code suivant :
using namespace System;
ref class CManagee
{
private:
String ^s;
public:
CManagee(String ^val) {s = val;};
~CManagee() { Console::WriteLine("Destructeur : " + s); }
protected:
!CManagee() { Console::WriteLine("Finalizer :" + s); }
};
int main(array<System::String ^> ^args)
{
{
msclr::auto_handle<CManagee> cAutoHandle = gcnew CManagee("auto_handle");
CManagee ^cNormal = gcnew CManagee("normal");
Console::WriteLine("Après la construction");
}
Console::WriteLine("fin");
return 0;
}
Produit en sortie :
Après la construction
Destructeur : auto_handle
fin
Finalizer : normal
J’ai rajouté des { } pour forcer un bloc et montrer alors la destruction par l’appel au destructeur quand le auto_handle sort de portée. Tandis que le handle normal, lui, est détruit par le garbage collector en fin de programme.
Le template surcharge les opérateurs ->, ==, etc … ainsi il peut être utilisé comme un handle classique.
Notez que si on souhaite pouvoir continuer à utiliser le auto_handle une fois qu’il est sorti de portée, il faut au préalable l’avoir libéré avec release :
msclr::auto_handle<CManagee> cAutoHandle = gcnew CManagee("auto_handle");
cAutoHandle.release();
Console::WriteLine("Après la construction");
}
Console::WriteLine("fin");
produira en sortie :
Après la construction
fin
Finalizer : auto_handle
Un équivalent élégant au using du C#
Commentaires récents
- [Tests] Arrange Act Assert, une traduction ? dans
- [UnitTest][C#] Tester une méthode privée dans
- Récupérer une valeur d’un contrôle depuis une autre Form / inclusions croisées et déclaration anticipée dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
- Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight dans
Archives
- janvier 2013
- avril 2012
- janvier 2012
- juin 2011
- janvier 2011
- décembre 2010
- novembre 2010
- septembre 2010
- juin 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- mai 2009
- avril 2009
- mars 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007