Bonsoir,
Cela ne dev(r)ait pas arriver, mais bon...
Le but, étant d'écraser le pointeur session, et de le remplacer avec un pointeur tout frais
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 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
Partager