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

Une petite question de plus :)

lag-it
lag-it
Niveau 10
16 juillet 2003 à 23:59:04

Voila, ma question porte sur la création d´applications en général :

Imaginons que l´on crée une " dialog based application" qui se présente sous la forme de 2 boutons et d´un texte ( exemple simple ) .

Pour pouvoir mettre en place ces composants, on va utiliser des classes ( genre StaticText, . .. le nom dépend du framework ) et utiliser des pointeurs afin que les composant ne disparaissent pas dès que l´on quitte le constructeur :

ClassMachin nom = new ClassMachin( . .. ) ;

Maintenant voila ma question :

Sommes nous obligés d´utiliser delete pour effacer chacun des pointeurs à la fin de notre application pour libérer tous les espaces mémoire occupés par les composants ( boutons, textes . .. ) ou ces composants sont ils spprimés à lors de la destruction de l´app. ( avec destroy sous wxWindows par ex. ) ?

Kouic
Kouic
Niveau 9
17 juillet 2003 à 07:12:46

our tout les langages ne disposant pas de ´garbages collector´ il faut absolument detruire explicitement les pointeurs alloués. Sinon, pouf, ´memory leaks´

Kouic
Kouic
Niveau 9
17 juillet 2003 à 07:21:00

Arggg, je ne suis pas tres satifais de ma reponse la... pour les elements graphiques, c´est un peu different . ..
Ceci demande un test pour verifier.

lag-it
lag-it
Niveau 10
17 juillet 2003 à 09:49:12

Kouic, toi qui connait wxWindows, quand je crée une boite de dialogue avec boutons, textes, etc..., je doit deleter chacun de ces composants à la fermeture de l´app ?

Noisy
Noisy
Niveau 7
17 juillet 2003 à 10:11:43

Logiquement, tu n´a pas à les détruire à la fon de ton application... ce sont des objets qui se détruisent d´eux même à la fin de l´application...
En tout cas, G jamais vu ce genre de destructeur se faire...
Ni en VB, ni en C++ ni en Java...
Ou si ça se fait, j´aimerais bien qu´on m´explique comment et pourquoi, vu qu´on n´a pas besoin d´une infinité de boutons ou de textbox...

Altonfrere
Altonfrere
Niveau 10
17 juillet 2003 à 10:29:30

La logique veut surtout qu´à tout appel à new tu dois lui associer le delete correspondant . .. ( tout comme malloc<->free)

Une simple habitude à prendre ( ce n´est qu´une question de rigueur).

Même si le garbage collector fait le boulot à votre place c´est pas une raison pour négliger votre code ( ca vous jouera des tours un jour ou l´autre)!

lag-it
lag-it
Niveau 10
17 juillet 2003 à 11:06:49

Ouaip, mais dans le cas d´une boite de dialogue assez complexe, ca implique de nombreux pointeurs vers les boutons et autres objets en tant que données membres.
Mais bon, j´emploierai delete.

JeanYvesYves
JeanYvesYves
Niveau 10
17 juillet 2003 à 16:27:48

c´est vrai que moi aussi je te conseille vivement " delete"...
En fait, pour un systeme comme Linux ou Windows XP, les programmeurs se sont dit " il ne faut pas que le noyau plante, quoiqu´il arrive", donc on réserve une place pour chaque programme, et le systeme est capable de tout nettoyer si le programme se termine.
Donc c´est le systeme qui finit de nettoyer tes cochonneries quand tu as fini :)

Evidemment, je te parle de systeme bien programmé, car sous Windows 95, ouille !

Mais sinon, oui, il est important de programmer propre, donc 1 new = 1 delete :)

Lightness1024
Lightness1024
Niveau 10
17 juillet 2003 à 22:17:33

tout windows NT qui se respecte a une mémoire protégée, donc depuis 1993, pas seulement XP.

et a propos de ces new et de ces classes, ca existe ken C++ ca.
or un OS c kan meme pas fait pour etre programmé ken C++, surtout en C au contraire au départ.

donc je dirais ke ya pas de réponse général lag-it, surtout une réponse orientée librairie. ( la lib ke t´utilises)

moi perso j´utilise pas de lib, je fais mes fenetres direct avec la SDK Win32 avec CreateWindowEx et RegisterClass ya pas de classes, pas d´objets dynamiques, pas de problemes de memory leaks.

MarinaTouch
MarinaTouch
Niveau 4
17 juillet 2003 à 22:20:38

Mais il n´y a pas QUE NT qui a une memoire protégée! Tout les OS... Heureusement...

lag-it
lag-it
Niveau 10
17 juillet 2003 à 23:02:12

Merci à tous :)
J´utiliserait autant de delete que de new, ca vaut mieux.
La seule chose qui me refroidissait, c´est que pour un projet complexe, ca risque de faire beaucoup de membres de données.
Mais bon.

kookii
kookii
Niveau 4
17 juillet 2003 à 23:03:43

Si tu programmes avec des classes en general ca posera pas de pb car les delete se feront ds les destructeurs

lag-it
lag-it
Niveau 10
17 juillet 2003 à 23:12:10

Mais ca c´est valable pour les membres de données de la classe.
Alors que lorsqu´on utilise :

classe *nom = new classe(...);

, il faut explicitement utiliser delete pour récupérer l´espace mémoire utilisé par la classe, non ?

lag-it
lag-it
Niveau 10
17 juillet 2003 à 23:34:13

Bon, j´ai une autre question ( encore ! ) tant que j´y suis : ca concerne la réinstalation de Visual C++ . net.
J´ai fait un copier coller de ce que j´avais écrit sur un forum :

["]
Je me suis procuré le logiciel " Visual C++ . NET Initiation Version 2002" il
y a environs 6 mois et il m´est impossible de le réinstaller.
Lors de ma première instalation, tout avait bien fonctionné et je pouvais
utiliser le produit.
Cependant, pour des raisons de place sur mon disque, j´ai été amené à le
déinstaller.
Or, aujourd´hui, impossible d´effectuer une nouvelle installation :

J´insère le disque 1 dans mon lecteur.
L´installeur charge certains composants, puis après un temps de réflexion,
une boite de dialogue m´annonce une erreur et je suis obligé de quitter.
En consultant le journal des erreurs, je relève ceci :

[07/17/03,16:49:27] setup.exe: [2] Value ( directory) from g_szRegvalSuiteLocation doesn´t exist in CSetupManager::RemoveSetupFiles()
[07/17/03,16:49:27] setup.exe: [2] CSetupManager::RemoveSetupFiles() failed
in CSetupManager::RunInstall()

Je précise qu´il est possible que mon CD soit abimé ou que j´ai supprimé
certains fichiers de mon disque par inadvertance.

Quelles sont les raisons de cette erreur ?

Si le problème vient d´un disfonctionnement du CD-Rom, où puis-je me
procurer un nouvel exemplaire du CD, sans avoir à racheter une version en
boite couteuse avec une deuxième licence qui me serait inutile ?
["]

La j´ai vraiment besoin d´aide, pask´à 150 € la boite euhhhh ! !!!! :-)))
Et puis DevCpp ca va bien trois minutes.

Lightness1024
Lightness1024
Niveau 10
19 juillet 2003 à 14:50:13

je te répondrais pas pour ton installation.

par contre a propos des new et tout ca, si tu fait des new dans une méthode init() ou un constructeur et que tu fais ton delete dans le destructeur, tu n´auras pas a te soucier dans ton prog général des allocations vu ke t´auras déja programmé le processus.
et cette classe et ben pour pas avoir encore a faire des new et tout ca tu la fait en statique ! !
je vois vraiment pas pkoi tu tiens tant que ca a tout mettre en dynamique c pourtant plus chiant qu´autre chose !

et d´ailleur puiskon parle de new et delete j´en profite encore ( et encore) pour faire la promo de ma superbe classe de tableaux sécurisés:

http://www.chez.com/lightness1024/SecureArray.zip

ca t´évitera les leaks, et les buffers overrun !

parlons en d´ailleur, tout OS a une mémoire protégée ?
oui disons plus ou moins ( tout est relatif)
sous DOS 16 bits en mode réel ( donc les très vieux)
c´était pas génant de fixer une valeur de segment et un offset au pif et d´aller écire qq part en mémoire !
imagine que tu ais un bug dans ton programme et tu va changer les variables d´environnement ou plus grave ca peut faire des beaux crashs.

depuis le 32 bits et le flat space ou on accède a 2 GO de RAM sans segments ni offsets avec des long pointeurs ( ou far pointeurs) c´est encore pire, c´est pour ca kon utilise constament le mode protégé. ( juste un pti flag a activer dans le processeur) et surtout une grosse gestion dans l´OS derriere...
sous windows 9.1 certains zones sont protégés ( en particulier le début)
ca affichera le fameux " l´application a effectuée une operation non conforme" truc muche...
si on tente l´acces a un endroit ou il veut pas.
sous NT et sous linux la mémoire est non seulement flat 32 bits ( 2Go pour l´OS, 2 GO pour les applis) mais en plus chaque application a droit a son espace réservé à partir de 0.
le heap de chaque appli est simulé comme étant un gros espace vierge de 2 GO a lui tout seul.
( evidemment dans les couches inférieurs il faut se partager la place dans la mémoire physique mais c l´OS ki s´en occupe)

et je ne parle pas des 36 bits qui permettent 64 GO de RAM ( voir windows 2003 server...)

.

lag-it
lag-it
Niveau 10
19 juillet 2003 à 14:59:54

Merci pour tes précisions Light.
C´est vrai que je vais mettre mes objets en statique autant que possible.
Sinon j´ai résolu mon problème :)

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