Pour répondre à HArkonnen:
Quand tu me dis que le CPEn est détruit implictement en fin de bloc, il semble que ce ne soit pas le cas:
En effet, j'ai fait plein de tests depuis ce matin, et voici sans fdoute le plus probant :
Considère le code suivant:
Code :
- void CTestingGraphicsView::OnTest()
- {
- // TODO: Add your command handler code here
- const int NUM = 20480;
- CPen* myPen = new CPen[NUM];
- for (int i = 0; i < NUM; i++){
- myPen[i].CreatePen(PS_SOLID, 2, RGB(0,0,0));
- }
- delete[] myPen;
- }
|
En théorie, apres avoir lancé l'application et apres avoir exécuté la fonction membre OnTest, l'état de la mémoire (Working Set) devrait etre le meme qu'avant d'avoir exécuté la fonction, puisque les CPen, à la sortie de la boucle for, et a fortiori, à la sortie de la fonction, sont effacés!
Or en utilisant "Process Viewer", avant avoir exécuté la fonction, la taille du Working Set est de 192 ko alors qu'elle est de 268 ko apres avoir exécuté la fonction. Ce qui prouve qu'il y a un trou de 76 ko qui ont disparu (=> non effacés)
Maintenant, si je fais exactement le meme test, mais en mettant un myPen[i].DeleteObject() dans la boucle for, j'obtiens bien un Working Set de 192 ko avant et APRES avoir exécuté la fonction.
Il me semble donc qu'il est plus propre de faire un DeleeObject()
Quelqu'un peut il confirmer?
}