SALOME documentation central
src/Utils/Utils_DESTRUCTEUR_GENERIQUE.hxx
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 # if !defined( __DESTRUCTEUR_GENERIQUE__H__ )
00029 # define __DESTRUCTEUR_GENERIQUE__H__
00030
00031 #include <SALOMEconfig.h>
00032
00033 #include "SALOME_Utils.hxx"
00034
00035 #include <list>
00036 #include <cassert>
00037 #include <omniORB4/CORBA.h>
00038 #include <iostream>
00039
00040
00062 class UTILS_EXPORT DESTRUCTEUR_GENERIQUE_
00063 {
00064 public :
00065 static std::list<DESTRUCTEUR_GENERIQUE_*> *Destructeurs;
00066
00067 virtual ~DESTRUCTEUR_GENERIQUE_() {}
00068 static const int Ajout( DESTRUCTEUR_GENERIQUE_ &objet );
00069 virtual void operator()( void )=0 ;
00070 };
00071
00072
00095 template <class TYPE> class DESTRUCTEUR_DE_ : public DESTRUCTEUR_GENERIQUE_
00096 {
00097 public :
00098
00099
00100
00101
00102 DESTRUCTEUR_DE_(TYPE &objet):
00103 _PtrObjet( &objet )
00104 {
00105 assert(DESTRUCTEUR_GENERIQUE_::Ajout( *this ) >= 0) ;
00106 }
00107
00108
00109
00110
00111
00112 virtual void operator()(void){
00113 typedef PortableServer::ServantBase TServant;
00114 if(_PtrObjet){
00115 if(dynamic_cast<TServant*>(_PtrObjet)){
00116
00117
00118
00119
00120
00121
00122
00123
00124 }else{
00125
00126 TYPE* aPtr = static_cast<TYPE*>(_PtrObjet);
00127 delete aPtr;
00128 }
00129 _PtrObjet = NULL ;
00130 }
00131 }
00132
00133 virtual ~DESTRUCTEUR_DE_(){
00134 assert(!_PtrObjet) ;
00135 }
00136
00137 private :
00138 TYPE *_PtrObjet ;
00139 };
00140
00141
00142 # endif
Copyright © 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS