J'ai une question surement très conne et simpliste (y'a bien longtemps
que je code plus en assembleur, passer du motorola 68000 aux intels,
merci, j'ai essayé et cela ne m'a pas convaincu).
Voila, lorsque je crée une fenêtre avec un truc du genre :
CWnd *pWnd=new CWnd
Puis je fais joujou avec cette fenêtre et je la ferme.
Lors de la cloture, j'ai cru comprendre que la routine de base
DestroyWindow faisait elle même un delete this, donc j'en conclue que je
ne suis pas obligé de le faire moi-même.
J'ai une question surement très conne et simpliste (y'a bien longtemps que je code plus en assembleur, passer du motorola 68000 aux intels, merci, j'ai essayé et cela ne m'a pas convaincu).
Bizarre, vu le gouffre de puissance netre un Intel et un Motorola...
Voila, lorsque je crée une fenêtre avec un truc du genre : CWnd *pWnd=new CWnd
Oui, jusque là c'est bon.
Puis je fais joujou avec cette fenêtre et je la ferme. Lors de la cloture, j'ai cru comprendre que la routine de base DestroyWindow faisait elle même un delete this, donc j'en conclue que je ne suis pas obligé de le faire moi-même.
Vu le CWnd, je suppute que tu utilises les MFCs. La doc te dit :
"The MFC framework manages window destruction as well as creation for those windows associated with framework documents and views. If you create additional windows, you are responsible for destroying them."
Donc... tout dépend du type de ta fenêtre, additionnelle ou pas ? Sinon CWnd::~CWnd appelle DestroyWindow tout seul, t'as pas à le faire.
PS : quel rapport avec ta question et l'assembleur ???
-- Arnold McDonald (AMcD) - Help #32/2006 http://arnold.mcdonald.free.fr/
JM wrote:
J'ai une question surement très conne et simpliste (y'a bien longtemps
que je code plus en assembleur, passer du motorola 68000 aux intels,
merci, j'ai essayé et cela ne m'a pas convaincu).
Bizarre, vu le gouffre de puissance netre un Intel et un Motorola...
Voila, lorsque je crée une fenêtre avec un truc du genre :
CWnd *pWnd=new CWnd
Oui, jusque là c'est bon.
Puis je fais joujou avec cette fenêtre et je la ferme.
Lors de la cloture, j'ai cru comprendre que la routine de base
DestroyWindow faisait elle même un delete this, donc j'en conclue que
je ne suis pas obligé de le faire moi-même.
Vu le CWnd, je suppute que tu utilises les MFCs. La doc te dit :
"The MFC framework manages window destruction as well as creation for those
windows associated with framework documents and views. If you create
additional windows, you are responsible for destroying them."
Donc... tout dépend du type de ta fenêtre, additionnelle ou pas ? Sinon
CWnd::~CWnd appelle DestroyWindow tout seul, t'as pas à le faire.
J'ai une question surement très conne et simpliste (y'a bien longtemps que je code plus en assembleur, passer du motorola 68000 aux intels, merci, j'ai essayé et cela ne m'a pas convaincu).
Bizarre, vu le gouffre de puissance netre un Intel et un Motorola...
Voila, lorsque je crée une fenêtre avec un truc du genre : CWnd *pWnd=new CWnd
Oui, jusque là c'est bon.
Puis je fais joujou avec cette fenêtre et je la ferme. Lors de la cloture, j'ai cru comprendre que la routine de base DestroyWindow faisait elle même un delete this, donc j'en conclue que je ne suis pas obligé de le faire moi-même.
Vu le CWnd, je suppute que tu utilises les MFCs. La doc te dit :
"The MFC framework manages window destruction as well as creation for those windows associated with framework documents and views. If you create additional windows, you are responsible for destroying them."
Donc... tout dépend du type de ta fenêtre, additionnelle ou pas ? Sinon CWnd::~CWnd appelle DestroyWindow tout seul, t'as pas à le faire.
PS : quel rapport avec ta question et l'assembleur ???
-- Arnold McDonald (AMcD) - Help #32/2006 http://arnold.mcdonald.free.fr/
JM
Arnold McDonald (AMcD) a écrit :
Bizarre, vu le gouffre de puissance netre un Intel et un Motorola...
Puissance, peut-être, mais facilité d'utilisation et de programmation, le 68000 était fabuleux!
Voila, lorsque je crée une fenêtre avec un truc du genre : CWnd *pWnd=new CWnd
Oui, jusque là c'est bon.
Vu le CWnd, je suppute que tu utilises les MFCs. La doc te dit :
"The MFC framework manages window destruction as well as creation for those windows associated with framework documents and views. If you create additional windows, you are responsible for destroying them."
Donc... tout dépend du type de ta fenêtre, additionnelle ou pas ? Sinon CWnd::~CWnd appelle DestroyWindow tout seul, t'as pas à le faire.
En fait, ce que je ne comprends pas trop, c'est si lors de l'appel de DestroyWindow, il y a automatiquement un delete this (ou équivalent). C'est pas hyper clair (enfin pour moi), dans la doc et le lien du dessus.
PS : quel rapport avec ta question et l'assembleur ???
Je ne sais plus trop, mais dans la longue discussion "fuites mémoires", cela a dérivé entre des propos sur des questions "stupides" sur la gestion mémoire et le fait qu'en France on codait plus en assembleur ou un truc dans le genre :-)
Arnold McDonald (AMcD) a écrit :
Bizarre, vu le gouffre de puissance netre un Intel et un Motorola...
Puissance, peut-être, mais facilité d'utilisation et de programmation,
le 68000 était fabuleux!
Voila, lorsque je crée une fenêtre avec un truc du genre :
CWnd *pWnd=new CWnd
Oui, jusque là c'est bon.
Vu le CWnd, je suppute que tu utilises les MFCs. La doc te dit :
"The MFC framework manages window destruction as well as creation for those
windows associated with framework documents and views. If you create
additional windows, you are responsible for destroying them."
Donc... tout dépend du type de ta fenêtre, additionnelle ou pas ? Sinon
CWnd::~CWnd appelle DestroyWindow tout seul, t'as pas à le faire.
En fait, ce que je ne comprends pas trop, c'est si lors de l'appel de
DestroyWindow, il y a automatiquement un delete this (ou équivalent).
C'est pas hyper clair (enfin pour moi), dans la doc et le lien du dessus.
PS : quel rapport avec ta question et l'assembleur ???
Je ne sais plus trop, mais dans la longue discussion "fuites mémoires",
cela a dérivé entre des propos sur des questions "stupides" sur la
gestion mémoire et le fait qu'en France on codait plus en assembleur ou
un truc dans le genre :-)
Bizarre, vu le gouffre de puissance netre un Intel et un Motorola...
Puissance, peut-être, mais facilité d'utilisation et de programmation, le 68000 était fabuleux!
Voila, lorsque je crée une fenêtre avec un truc du genre : CWnd *pWnd=new CWnd
Oui, jusque là c'est bon.
Vu le CWnd, je suppute que tu utilises les MFCs. La doc te dit :
"The MFC framework manages window destruction as well as creation for those windows associated with framework documents and views. If you create additional windows, you are responsible for destroying them."
Donc... tout dépend du type de ta fenêtre, additionnelle ou pas ? Sinon CWnd::~CWnd appelle DestroyWindow tout seul, t'as pas à le faire.
En fait, ce que je ne comprends pas trop, c'est si lors de l'appel de DestroyWindow, il y a automatiquement un delete this (ou équivalent). C'est pas hyper clair (enfin pour moi), dans la doc et le lien du dessus.
PS : quel rapport avec ta question et l'assembleur ???
Je ne sais plus trop, mais dans la longue discussion "fuites mémoires", cela a dérivé entre des propos sur des questions "stupides" sur la gestion mémoire et le fait qu'en France on codait plus en assembleur ou un truc dans le genre :-)
Bertrand Lenoir-Welter
JM :
CWnd *pWnd=new CWnd Puis je fais joujou avec cette fenêtre et je la ferme. Lors de la cloture, j'ai cru comprendre que la routine de base DestroyWindow faisait elle même un delete this, donc j'en conclue que je ne suis pas obligé de le faire moi-même.
Avec MFC, je sais pas. Mais chez Borland, même si ta fenêtre n'existe plus, elle est toujours allouée et c'est à toi de faire un delete.
Etant plutôt du genre expérimentateur, j'aurais tendance à faire le delete et voir si ça fait badaboum. Parce que dans le cas inverse, il se passera rien mais t'en sauras pas plus.
JM :
CWnd *pWnd=new CWnd
Puis je fais joujou avec cette fenêtre et je la ferme.
Lors de la cloture, j'ai cru comprendre que la routine de base
DestroyWindow faisait elle même un delete this, donc j'en conclue que je
ne suis pas obligé de le faire moi-même.
Avec MFC, je sais pas. Mais chez Borland, même si ta fenêtre n'existe
plus, elle est toujours allouée et c'est à toi de faire un delete.
Etant plutôt du genre expérimentateur, j'aurais tendance à faire le
delete et voir si ça fait badaboum. Parce que dans le cas inverse, il se
passera rien mais t'en sauras pas plus.
CWnd *pWnd=new CWnd Puis je fais joujou avec cette fenêtre et je la ferme. Lors de la cloture, j'ai cru comprendre que la routine de base DestroyWindow faisait elle même un delete this, donc j'en conclue que je ne suis pas obligé de le faire moi-même.
Avec MFC, je sais pas. Mais chez Borland, même si ta fenêtre n'existe plus, elle est toujours allouée et c'est à toi de faire un delete.
Etant plutôt du genre expérimentateur, j'aurais tendance à faire le delete et voir si ça fait badaboum. Parce que dans le cas inverse, il se passera rien mais t'en sauras pas plus.
JM
Bertrand Lenoir-Welter a écrit :
Etant plutôt du genre expérimentateur, j'aurais tendance à faire le delete et voir si ça fait badaboum. Parce que dans le cas inverse, il se passera rien mais t'en sauras pas plus.
Effectivement : un delete avant le DestroyWindow, cela marche. Le delete après le DestroyWindow, cela plante.
Merci
Bertrand Lenoir-Welter a écrit :
Etant plutôt du genre expérimentateur, j'aurais tendance à faire le
delete et voir si ça fait badaboum. Parce que dans le cas inverse, il se
passera rien mais t'en sauras pas plus.
Effectivement : un delete avant le DestroyWindow, cela marche.
Le delete après le DestroyWindow, cela plante.
Etant plutôt du genre expérimentateur, j'aurais tendance à faire le delete et voir si ça fait badaboum. Parce que dans le cas inverse, il se passera rien mais t'en sauras pas plus.
Effectivement : un delete avant le DestroyWindow, cela marche. Le delete après le DestroyWindow, cela plante.
Merci
Bertrand Lenoir-Welter
JM :
Effectivement : un delete avant le DestroyWindow, cela marche. Le delete après le DestroyWindow, cela plante.
Il me viendrait pas à l'idée de désallouer AVANT d'appeler DestroyWindow, sauf si l'appel est implicite. Et si le delete plante après, c'est sans doute que la désallocation a été faite. Donc pas de delete du tout, à mon avis.
Au passage, c'est curieux que DestroyWindow fasse un delete. Imaginons que, pour une raison sotte et grenue, on ait envie de recréer la fenêtre, ça veut dire qu'il faut réallouer le pointeur même si l'on na pas désalloué. Je verrais assez bien DestroyWindow appelée automatiquement par le delete, mais l'inverse me chiffonne un peu.
JM :
Effectivement : un delete avant le DestroyWindow, cela marche.
Le delete après le DestroyWindow, cela plante.
Il me viendrait pas à l'idée de désallouer AVANT d'appeler
DestroyWindow, sauf si l'appel est implicite. Et si le delete plante
après, c'est sans doute que la désallocation a été faite. Donc pas de
delete du tout, à mon avis.
Au passage, c'est curieux que DestroyWindow fasse un delete. Imaginons
que, pour une raison sotte et grenue, on ait envie de recréer la
fenêtre, ça veut dire qu'il faut réallouer le pointeur même si l'on na
pas désalloué. Je verrais assez bien DestroyWindow appelée
automatiquement par le delete, mais l'inverse me chiffonne un peu.
Effectivement : un delete avant le DestroyWindow, cela marche. Le delete après le DestroyWindow, cela plante.
Il me viendrait pas à l'idée de désallouer AVANT d'appeler DestroyWindow, sauf si l'appel est implicite. Et si le delete plante après, c'est sans doute que la désallocation a été faite. Donc pas de delete du tout, à mon avis.
Au passage, c'est curieux que DestroyWindow fasse un delete. Imaginons que, pour une raison sotte et grenue, on ait envie de recréer la fenêtre, ça veut dire qu'il faut réallouer le pointeur même si l'on na pas désalloué. Je verrais assez bien DestroyWindow appelée automatiquement par le delete, mais l'inverse me chiffonne un peu.
Cyrille Szymanski
Bertrand Lenoir-Welter <bertrand-dot-2006-at-galaad-dot-net> wrote in news:4450c726$0$29180$:
JM :
CWnd *pWnd=new CWnd Puis je fais joujou avec cette fenêtre et je la ferme. Lors de la cloture, j'ai cru comprendre que la routine de base DestroyWindow faisait elle même un delete this, donc j'en conclue que je ne suis pas obligé de le faire moi-même.
Avec MFC, je sais pas. Mais chez Borland, même si ta fenêtre n'existe plus, elle est toujours allouée et c'est à toi de faire un delete.
Les MFC sont notoires pour ne pas être RAII (parfois si, parfois non, comme l'explique AMcD).
-- Cyrille Szymanski
Bertrand Lenoir-Welter <bertrand-dot-2006-at-galaad-dot-net> wrote in
news:4450c726$0$29180$8fcfb975@news.wanadoo.fr:
JM :
CWnd *pWnd=new CWnd
Puis je fais joujou avec cette fenêtre et je la ferme.
Lors de la cloture, j'ai cru comprendre que la routine de base
DestroyWindow faisait elle même un delete this, donc j'en conclue que
je ne suis pas obligé de le faire moi-même.
Avec MFC, je sais pas. Mais chez Borland, même si ta fenêtre n'existe
plus, elle est toujours allouée et c'est à toi de faire un delete.
Les MFC sont notoires pour ne pas être RAII (parfois si, parfois non, comme
l'explique AMcD).
Bertrand Lenoir-Welter <bertrand-dot-2006-at-galaad-dot-net> wrote in news:4450c726$0$29180$:
JM :
CWnd *pWnd=new CWnd Puis je fais joujou avec cette fenêtre et je la ferme. Lors de la cloture, j'ai cru comprendre que la routine de base DestroyWindow faisait elle même un delete this, donc j'en conclue que je ne suis pas obligé de le faire moi-même.
Avec MFC, je sais pas. Mais chez Borland, même si ta fenêtre n'existe plus, elle est toujours allouée et c'est à toi de faire un delete.
Les MFC sont notoires pour ne pas être RAII (parfois si, parfois non, comme l'explique AMcD).
Puissance, peut-être, mais facilité d'utilisation et de programmation, le 68000 était fabuleux!
C'est clair, il n'y avait pas photo. J'ai débuté dessus (snif, séquence nostalgie). Après, quand je suis passé sur Intel et ses 127.256,5 modèles mémoire, j'ai pleuré ma mère. Mais bon, depuis que je sais que l'Itanium sera un échec définitif, je reste chez Intel :-).
-- Arnold McDonald (AMcD)
http://arnold.mcdonald.free.fr/
JM wrote:
Puissance, peut-être, mais facilité d'utilisation et de programmation,
le 68000 était fabuleux!
C'est clair, il n'y avait pas photo. J'ai débuté dessus (snif, séquence
nostalgie). Après, quand je suis passé sur Intel et ses 127.256,5 modèles
mémoire, j'ai pleuré ma mère. Mais bon, depuis que je sais que l'Itanium
sera un échec définitif, je reste chez Intel :-).
Puissance, peut-être, mais facilité d'utilisation et de programmation, le 68000 était fabuleux!
C'est clair, il n'y avait pas photo. J'ai débuté dessus (snif, séquence nostalgie). Après, quand je suis passé sur Intel et ses 127.256,5 modèles mémoire, j'ai pleuré ma mère. Mais bon, depuis que je sais que l'Itanium sera un échec définitif, je reste chez Intel :-).
-- Arnold McDonald (AMcD)
http://arnold.mcdonald.free.fr/
JM
Arnold McDonald (AMcD) a écrit :
C'est clair, il n'y avait pas photo. J'ai débuté dessus (snif, séquence nostalgie). Après, quand je suis passé sur Intel et ses 127.256,5 modèles mémoire, j'ai pleuré ma mère. Mais bon, depuis que je sais que l'Itanium sera un échec définitif, je reste chez Intel :-).
Atari vaincra!
Arnold McDonald (AMcD) a écrit :
C'est clair, il n'y avait pas photo. J'ai débuté dessus (snif, séquence
nostalgie). Après, quand je suis passé sur Intel et ses 127.256,5 modèles
mémoire, j'ai pleuré ma mère. Mais bon, depuis que je sais que l'Itanium
sera un échec définitif, je reste chez Intel :-).
C'est clair, il n'y avait pas photo. J'ai débuté dessus (snif, séquence nostalgie). Après, quand je suis passé sur Intel et ses 127.256,5 modèles mémoire, j'ai pleuré ma mère. Mais bon, depuis que je sais que l'Itanium sera un échec définitif, je reste chez Intel :-).
Atari vaincra!
JM
Bertrand Lenoir-Welter a écrit :
Il me viendrait pas à l'idée de désallouer AVANT d'appeler DestroyWindow, sauf si l'appel est implicite. Et si le delete plante après, c'est sans doute que la désallocation a été faite. Donc pas de delete du tout, à mon avis.
Ce que je voulais dire, c'est que si je fais le delete avant destroywindow, il marche normalement (heureusement), c'était juste pour vérifier! Le fait qu'il plante après le destroywindow (j'ai appliqué le testé-compris comme conseillé), montre juste que le destroywindow désalloue tout seul
Au passage, c'est curieux que DestroyWindow fasse un delete. Imaginons que, pour une raison sotte et grenue, on ait envie de recréer la fenêtre, ça veut dire qu'il faut réallouer le pointeur même si l'on na pas désalloué. Je verrais assez bien DestroyWindow appelée automatiquement par le delete, mais l'inverse me chiffonne un peu.
A priori, en regardant les sources MFC, il semblerait que l'appel soit fait dans le destructeur. Mais dans le lien donné par AMCD, microsoft à l'air de conseiller d'éviter d'utiliser delete
Bertrand Lenoir-Welter a écrit :
Il me viendrait pas à l'idée de désallouer AVANT d'appeler
DestroyWindow, sauf si l'appel est implicite. Et si le delete plante
après, c'est sans doute que la désallocation a été faite. Donc pas de
delete du tout, à mon avis.
Ce que je voulais dire, c'est que si je fais le delete avant
destroywindow, il marche normalement (heureusement), c'était juste pour
vérifier!
Le fait qu'il plante après le destroywindow (j'ai appliqué le
testé-compris comme conseillé), montre juste que le destroywindow
désalloue tout seul
Au passage, c'est curieux que DestroyWindow fasse un delete. Imaginons
que, pour une raison sotte et grenue, on ait envie de recréer la
fenêtre, ça veut dire qu'il faut réallouer le pointeur même si l'on na
pas désalloué. Je verrais assez bien DestroyWindow appelée
automatiquement par le delete, mais l'inverse me chiffonne un peu.
A priori, en regardant les sources MFC, il semblerait que l'appel soit
fait dans le destructeur.
Mais dans le lien donné par AMCD, microsoft à l'air de conseiller
d'éviter d'utiliser delete
Il me viendrait pas à l'idée de désallouer AVANT d'appeler DestroyWindow, sauf si l'appel est implicite. Et si le delete plante après, c'est sans doute que la désallocation a été faite. Donc pas de delete du tout, à mon avis.
Ce que je voulais dire, c'est que si je fais le delete avant destroywindow, il marche normalement (heureusement), c'était juste pour vérifier! Le fait qu'il plante après le destroywindow (j'ai appliqué le testé-compris comme conseillé), montre juste que le destroywindow désalloue tout seul
Au passage, c'est curieux que DestroyWindow fasse un delete. Imaginons que, pour une raison sotte et grenue, on ait envie de recréer la fenêtre, ça veut dire qu'il faut réallouer le pointeur même si l'on na pas désalloué. Je verrais assez bien DestroyWindow appelée automatiquement par le delete, mais l'inverse me chiffonne un peu.
A priori, en regardant les sources MFC, il semblerait que l'appel soit fait dans le destructeur. Mais dans le lien donné par AMCD, microsoft à l'air de conseiller d'éviter d'utiliser delete