+ /* Programs the destruction at the end of the process, of the object objet.
+ This method records in _PtrObjet the address of an object to be destroyed
+ at the end of the process
+ */
+ DESTRUCTEUR_DE_(TYPE &objet):
+ _PtrObjet( &objet )
+ {
+ assert(DESTRUCTEUR_GENERIQUE_::Ajout( *this ) >= 0) ;
+ }
+
+ /* Performs the destruction of the object.
+ This method really destroys the object pointed by _PtrObjet.
+ It should be called at the end of the process (i.e. at exit).
+ */
+ virtual void operator()(void){
+ typedef PortableServer::ServantBase TServant;
+ if(_PtrObjet){
+ if(dynamic_cast<TServant*>(_PtrObjet)){
+ // std::cerr << "WARNING: automatic destruction for servant is no more used. It's too late in exit. Use explicit call" << std::endl;
+ /*
+ if(TServant* aServant = dynamic_cast<TServant*>(_PtrObjet)){
+ PortableServer::POA_var aPOA = aServant->_default_POA();
+ PortableServer::ObjectId_var anObjectId = aPOA->servant_to_id(aServant);
+ aPOA->deactivate_object(anObjectId.in());
+ aServant->_remove_ref();
+ */
+ }else{
+ //cerr << "DESTRUCTEUR_GENERIQUE_::operator() deleting _PtrObjet" << endl;
+ TYPE* aPtr = static_cast<TYPE*>(_PtrObjet);
+ delete aPtr;
+ }
+ _PtrObjet = NULL ;
+ }
+ }
+
+ virtual ~DESTRUCTEUR_DE_(){
+ assert(!_PtrObjet) ;
+ }