CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C++ : le destructeur est inutil !?

Orangebud2
Orangebud2
Niveau 10
04 avril 2009 à 00:39:18

voila je trouve etrange que quand je delete un objet avec delete, cela marche même si je n'ai pas declaré de destructeur dans la classe. A quoi sert donc le destructeur si on peut detruire un objet meme sans destructeur ?

JujuDredd
JujuDredd
Niveau 10
04 avril 2009 à 00:43:38

Je suis pas un expert en C++, mais il me semble que par défaut tu dois avoir un destructeur "nul", c'est-à-dire un destructeur qui ne fait rien. L'intérêt du destructeur c'est si il y a plus à libérer que la mémoire de ton objet lui même. Par exemple si certain de ses attributs son des objets, il faudra que le destructeur lance lui-même delete sur ces objets.

godrik
godrik
Niveau 30
04 avril 2009 à 18:28:25

Oula, tu confond deux choses ici. La destruction et l'operateur deletre. Le destructeur d'un objet sert a specifier ce qu'il faut faire pour le detruire. Cela sert principalement pour liberer la memoire alloue dynamiquement. l'operateur delete sert a detruire les objet cree dynamiquement (i.e., avec l'operateur new). Considere les codes commentes suivant:

http://pastebin.com/m7c4e1896

chris_27
chris_27
Niveau 10
04 avril 2009 à 18:37:12

orangebud2 : tu fais exprès d'être ignorant ? :doute:

Orangebud2
Orangebud2
Niveau 10
05 avril 2009 à 00:37:08

D'ou tu te permet de me dire que je suis ignorant ?? J'ai jamais utilisé un destructeur, et je croyais qu'il etait appelé lors d'un delete, et j'arrivais à delete un objet sans ecrire de detructeur dans ma classe, un peu de respect merci.

je comprends toujours pas les destructeurs mais bon j'en met jamais dans mes classes et ca m'handicap pas

dnob700
dnob700
Niveau 10
05 avril 2009 à 00:59:23

c'est juste cette manière de poser les question. Plutôt que de dire : "allocation dynamique = hypocrisie" ou "le destructeur est inutil !? ", tu pourrait demander à quoi sert l'allocation dynamique, ou à quoi sert un destructeur.

Lorsqu'on apprend un langage c'est pas mal de se dire qu'il y a énormément de chose que tu ne sais pas encore et que tu comprendras au fur et à mesure. C'est en te remettant en question que tu avanceras le plus vite.

Orangebud2
Orangebud2
Niveau 10
05 avril 2009 à 02:47:50

haha nan mais c'est une manière d'introduire la chose sous forme de débat provoquant, je me doute bien que le destructeur à pas été créé pour faire jolie, et que l'allocation dynamique à une utilité fondée, chaud que vous ayez pris ça comme ça ...

Orangebud2
Orangebud2
Niveau 10
05 avril 2009 à 02:48:59

Justement moi j'aimerais tout apprendre , alors un truc même anodin comme le déstructeur ça me travail le cerveau à longueur de journée je me demande à quoi ça peut bien servir ...

godrik
godrik
Niveau 30
05 avril 2009 à 04:07:49

le code que je te propose reponds a ta question.
Je te conseillerai de lire un cours/livre de C++...

chris_27
chris_27
Niveau 10
05 avril 2009 à 16:35:08

« haha nan mais c'est une manière d'introduire la chose sous forme de débat provoquant » :d) ne t'étonne donc pas si je te prends pour un con. :-)

Orangebud2
Orangebud2
Niveau 10
05 avril 2009 à 17:59:25

godrik
Posté le 05 avril 2009 à 04:07:49 le code que je te propose reponds a ta question.
Je te conseillerai de lire un cours/livre de C++...

Ben ça va je connais déja beaucoup de choses, on peut aps tout connaitre, j'apprends au fur et à mesur que j'ai besoin de nouveaux éléments, la grace a ce que tu m'a expliqué hier sur l'allocation par exemple, j'ai pu de problèmes.

saleGauss
saleGauss
Niveau 9
05 avril 2009 à 20:26:04

Par définition, un destructeur sert à deux grandes sortes de choses :
1/ libérer la mémoire dynamique assoiée à l'objet en question
2/ Faire d'autres choses particulières.

1/ Prenons l'exemple d'une classe Objet3D :
class Objet3D
{
//
texture* text;
}
Considere obj l'instance d'une telle classe.

Disons que la texture pointée à été allouée dynamiquement à la création de l'objet 3D (donc dans le constructeur).
Bien, par defaut tout ce qui est contenue dans obj ET qui est statique sera détruit automatiquement lors de la mort de obj.
Ce n'est pas le cas de ta texture.

Ainsi dans ton destructeur tu devras mettre :

Objet3D::~Objet3D()
{
delete(texture);
texture = NULL;
}

2/ Imagine qu'à la création de chaque objet, tu empiles des pointeurs de ces objets dans une liste de rendu.

Bien sur, lorsque tu supprime un objet, tu voudras supprimer son pointeur de la liste de rendu (afin de ne pas essayer de dessiner un objet qui n'existe plus)
Et bien ce genre d'actions très spécifiques ont tout intéret à etre dans le destructeur.
Ainsi, tu sais que cette action sera faite exactement à la destruction de l'objet, c'est très sécurisé comme manière de faire.
Si ce n'était pas le cas, ca serait au programmeur utilisateur de la classe Objet3D de penser à supprimer chaque objet qu'il balance de la liste de rendu.

J'espère avoir pu illustrer un peu tout ça clairement.
Bonne soirée

godrik
godrik
Niveau 30
06 avril 2009 à 00:09:51

"Ben ça va je connais déja beaucoup de choses, on peut aps tout connaitre, j'apprends au fur et à mesur que j'ai besoin de nouveaux éléments, la grace a ce que tu m'a expliqué hier sur l'allocation par exemple, j'ai pu de problèmes. "

Je ne permets pas de critiquer quelqu'un qui apprend. Je dis juste qu'un bon livre serait certainement utile dans ton cas. Parceque tu compte visiblement avancer et que tu te poses plein de question.

chef_oui_chef
chef_oui_chef
Niveau 10
20 avril 2009 à 17:34:14

Salut il est trop bien ce site :-)

je ne comprends pas ton code saleGauss tu alloues à tableau de texture, la désallocation serait plutôt
delete [] text non ? :/

chef_oui_chef
chef_oui_chef
Niveau 10
20 avril 2009 à 17:37:06

ça m'apprendra à poster avant de réfléchir désolé :-)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment