Problemas de liberación de recursos en mfc
CPen, CBrush o Cfont generalmente se crean mediante CreateXXX(),
como:
CPen pen
pen.CreatePen; (...);
Si llama a CreatePen(...); nuevamente sin pen.DeleteObject();, se producirá un error.
CDC
Se recomienda liberar el objeto cdc;
Utilice ReleaseDC(amp;cdc);
Recuerdo que había un programa que no se lanzó antes. Como resultado, Abrí el administrador de tareas y vi que la memoria ocupada por el programa sigue aumentando y se solucionará después del lanzamiento.
Suplemento:
No sé mucho sobre la teoría, así que te daré un ejemplo de mis sentimientos:
Supongamos que escribes este código a un evento de botón, como por ejemplo:
OnButton1(){
HDC hdc=GetDC(hWnd
CDC cdc
cdc.Attach (hdc);
cdc.TextOut(0, 0, "OK");
}
Si cdc no está publicado, entonces ejecuta el programa y abre el Administrador de tareas, verifica el proceso de su programa y luego hace clic en el botón. Debería ver que el uso de memoria está aumentando. Si lo libera, esta situación no debería suceder. En cuanto a no publicarlo, ¿sucederá? No estoy seguro de otras situaciones.
Para CPen CBrush, etc., asuma el siguiente código:
CBrush br; p>
br.CreateSolidBrush( RGB(0, 0, 0)); //Pincel negro
...
br.DeleteObject(); //Liberar br.
br.CreateSolidBrush(RGB(255, 0, 0)); //Pincel rojo
...
br.DeleteObject(); Releasebr
Si no suelta el pincel negro, ejecute br.CreateSolidBrush(RGB(255, 0, 0)); se producirá un error al crear el pincel rojo. Debería deberse a que no suelta el pincel. pincel negro Por supuesto, puedes usar dos objetos CBrush br1, br2.
Pero aun así se recomienda usar DeleteObject() después de su uso;