Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Allocation dynamique d'un objet c++  (Lu 2282 fois)

0 Membres et 2 Invités sur ce sujet

Arnibou

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Allocation dynamique d'un objet c++
« le: Janvier 27, 2013, 01:46:15 pm »
Bonjour,

Je me suis penché sur l'allocation dynamique d'un objet en c++ mais j'ai quelques problèmes de compréhention.

Pour déclarer un objet je fais par exemple:
objet *test = new objet;
ensuite pour le détruire, je fais un delete, jusque là tout va bien.

Maintenant je voudrais que quand j'appuie sur un touche, ça crée l'objet et sur une autre que ça le détruise,
j'ai testé pas mal de choses mais sans succès  :'(

if (sf::Keyboard::isKeyPressed(sf::Keyboard::C) && !test)
{
     test= true;
     objet *ptr = new objet;
}

if (sf::Keyboard::isKeyPressed(sf::Keyboard::E) && test)
{
     test = false;
     delete ptr;
}
 

Bien sur ça ne fonctionne pas, il me dit que ptr n'est pas déclaré au moment du delete.

Donc le new et delete doivent être toujours dans la même fonction? Je ne vois pas comment procédé...

merci d'éclairer un débutant dans la matière  :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Allocation dynamique d'un objet c++
« Réponse #1 le: Janvier 27, 2013, 02:40:00 pm »
Il faut bien distinguer déclaration et initialisation. Tu peux déclarer ton pointeur dans une portée plus grande que ton bloc if, ça ne t'empêche pas de l'initialiser dedans.

objet* ptr;

if (sf::Keyboard::isKeyPressed(sf::Keyboard::C) && !test)
{
     test= true;
     ptr = new objet;
}

if (sf::Keyboard::isKeyPressed(sf::Keyboard::E) && test)
{
     test = false;
     delete ptr;
}

Note que ton booléen est inutile, tu peux tester le pointeur directement.

objet* ptr = NULL;

if (sf::Keyboard::isKeyPressed(sf::Keyboard::C) && !ptr)
{
     ptr = new objet;
}

if (sf::Keyboard::isKeyPressed(sf::Keyboard::E) && ptr)
{
     delete ptr;
     ptr = NULL; // toujours mettre un pointeur à NULL s'il ne pointe pas/plus vers quelque chose de valide !
}

Mais avec ce code, tu vas créer/détruire ton objet de multiples fois : ce code va être exécuté tant que tu ne relâches pas la touche -- même si tu n'appuies que brièvement, ça peut s'exécuter plusieurs dizaines de fois.

Je te conseille aussi d'approfondir tes bases en C++ avant de passer à des choses plus compliquées. Sinon on va te voir tous les jours sur le forum, et un forum n'est pas l'endroit le plus adéquat pour apprendre le C++ ;)
Laurent Gomila - SFML developer

Arnibou

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Allocation dynamique d'un objet c++
« Réponse #2 le: Janvier 27, 2013, 02:50:22 pm »
Merci pour ta reponse.
Je n'avais jamais lu qu'on pouvait tester um pointeur comme ca, pas mal de cous n'en parle pas.
Je vais suivre ton conseil et continuer de potasser pour approndir tout ca.