Bonsoir,

Cela ne dev(r)ait pas arriver, mais bon...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
        template<typename Protocol>
        void server_engine<Protocol>::visit(session<Protocol>* session, socket_impl<Protocol>& socket, handlers::change_handler_server<Protocol>* ch)
        {
            std::cout << "session= " << session<<std::endl; // Adresse valide
            //session = new sessions::server<Protocol>(socket, ch->some_id); // Appel du constructeur: OK
            //delete session; // Appel du destructeur: OK
            auto s2 = new sessions::server<Protocol>(socket, ch->some_id); //Appel du constructeur: OK, mais dans le constructeur, si je fais std::cout<<this<<std::endl; j'ai une adresse qui ressemble à celle ci-après.
 
            std::cout << "s2= " << s2 << std::endl; // Mauvaise adresse, du style... 0x46684fe648464abd64684....
            session = s2; // Evidemment, pas mieux ...
            std::cout << "session= " << session << std::endl; // Pas mieux ...
            std::cout << "s2= " << s2 << std::endl; // Pas mieux ...
        }
Le but, étant d'écraser le pointeur session, et de le remplacer avec un pointeur tout frais
Le problème n'est donc pas sur le remplacement du vieux pointeur toujours bon, mais sur la création du nouveau, et je ne vois pas pourquoi cela peut foirer.
Avez-vous un idée ?

Ensuite, juste au cas où, le pointeur recu par la fonction, est un pointeur contenu dans une std::map<k, session*>. Y a t il un risque ?!
Où faut-il que je passe par quelque chose du style iterator->second = new_ptr; ?!

Merci,

nico