Passer d'un code avec pointeur nu vers un code avec pointeur "smart"
Bonjour la communauté,
Pour utiliser le module réseau de SFML j'ai besoin de bûcher (hélas) les pointeurs.
Après quelques tâtonnements (et beaucoup d'aide de Laurent du forum SFML), j'arrive au code suivant qui compile ET qui fonctionne !
C++
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| ... // lancement du listener serveur : allo
std::vector <sf::TcpSocket*> V_client;
bool tousPresents(false);
while(!tousPresents)
{
// déclaration d'un socket à affecter au prochain client qui le demande
sf::TcpSocket *joueur = new sf::TcpSocket();
if (allo.accept(*joueur) == sf::Socket::Done)
{
selecteur.add(*joueur);
V_client.push_back(joueur);
}
if (V_client.size() == nbJoueurs) tousPresents=true;
} |
sauf que :
Code:
std::vector <sf::TcpSocket*> V_client;
c'est mal, ai-je lu par ici... :mrgreen: Il semblerait qu'on ne code plus en C++ avec des pointeurs nus mais avec des pointeurs intelligents (le mieux, à mon sens, serait de coder sans pointeur du tout mais bon).
Débutant mais discipliné, je tente donc de remplacer le pointeur nu par un pointeur unique_ptr. cela donne ceci (<memory> est inclus) et le compilo est réglé pour accepter c++11:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| std::vector <std::unique_ptr<sf::TcpSocket>> V_joueur;
bool tousPresents(false);
while(!tousPresents)
{
// déclaration d'un socket à affecter au prochain client qui le demande
std::unique_ptr<sf::TcpSocket> joueur(new sf::TcpSocket); // <= ça le compilo n'aime pas ! :/
if (allo.accept(*joueur) == sf::Socket::Done)
{
selecteur.add(*joueur);
V_joueur.push_back(joueur);
}
if (V_joueur.size() == nbJoueurs) tousPresents=true;
} |
Comme indiqué en commentaire, le compilo ouvre "new_allocator.h" et fini sur une erreur :
Citation:
error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = sf::TcpSocket; _Dp = std::default_delete<sf::TcpSocket>]'|
Erreur évidemment incompréhensible à mon niveau.
Par ailleurs, je me suis aussi laissé dire que push_back et unique_ptr, ce n'était pas compatible... :?
Quelques pistes, conseils et indications de la syntaxe correcte serait donc TRES bienvenus. :calim2:
Merci de m'avoir lu. :)
Rick.