Sauberste Möglichkeit Brush, Pen ... zu löschen



  • Ich habe ein ActiveX geschrieben. Es ist allerdings noch sehr unsauber.
    Da die verwendeten Objecte wie Brush, Pen, DC noch nicht wieder freigegeben wurden. Weiß jemmand wie ich das am saubersten erledigen kann.

    PS.Sollte ich eigentlich auch verwendete Variablen wieder freigeben die ich nicht mehr brauch ? Gibt es da eine Möglichkeit ?

    MFG Ronny



  • CDC *dc = GetDC();
    
    CPen pen(PS_SOLID,1,RGB(255,0,0));
    CPen *oldpen = dc->SelectObject(&pen);
    
    CBrush brush(RGB(0,0,255));
    CBrush *oldbrush = dc->SelectObject(&brush);
    
    //mach was ....
    
    dc->SelectObject(oldbrush);
    dc->SelectObject(oldpen);
    
    ReleaseDC(dc);
    

    bei SelectObject() bekommst du immer einen Zeiger auf das zuvor verwendete Object zurück.
    Wenn du deine CPen oder CBrush nicht mit new erzeugst dann verlieren Sie am ende deiner Funktion ihre Gültigkeit und es kann zu Problemen kommen fals später darauf zugegriffen wird.
    deshalb ist es am besten immer(in den meisten Fällen) die Zeiger auf die alten Objecte speichern und am ende wieder zurückgeben.

    Wenn du eine Variable (Zeiger) mit new erzeugst dann mußt du sie am ende mit delete wieder freigeben ansonsten aber gilt eh die normale Lebensdauer einer Variable

    MFG Sigi


Anmelden zum Antworten