none
Resourcen freigeben? RRS feed

  • Frage

  • Hallo Forum

    Eine sehr einfache Frage:

    Wenn ich innerhalb eines C-Blockes (geschwungene Klammern) ein CFont Objekt anlege... muss ich das dann explizit löschen, oder macht das der Destruktor, wenn das Ding aufhört zu leben?

    Beispiel:

    if (true) { // Beginn C-Block

      CFont FNT; // FNT Klasse angelegt, Konstruktor wird aufgerufen

      FNT.CreateFont(.....);

      CFont *pOldFont = pDC->SelectObject(&FNT);

      pDC->TextOut(...);

      pDC->SelectObject(pOldFont);

      FNT.DeleteObject();  // <-- muss das sein, oder macht das der Destruktor ohnehin?

    }

    Grüße

    FireHeart

    Montag, 23. August 2010 08:35

Antworten

  • Das macht der Destruktor!

    Aber die Frage hättest Du Dir selber beantworten können:
    Du hast den Sourcecode! ;)


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    • Als Antwort markiert Fire-Heart Montag, 23. August 2010 09:09
    Montag, 23. August 2010 08:54
    Moderator

Alle Antworten

  • Das macht der Destruktor!

    Aber die Frage hättest Du Dir selber beantworten können:
    Du hast den Sourcecode! ;)


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    • Als Antwort markiert Fire-Heart Montag, 23. August 2010 09:09
    Montag, 23. August 2010 08:54
    Moderator
  • BTW:

    if (true) { // Beginn C-Block

    Warum setzt Du überhaupt if (true) davor. Du kannst immer einen Block neu anfangen.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Montag, 23. August 2010 08:57
    Moderator
  • Hallo Martin

    Das "if (true)" war nur ein einfaches Beispiel, um die "Lebensdauer" des CFont Objektes übersichtlich einzugrenzen.

    Natürlich schreibe ich das nicht genau so in dieser Form, sondern z.B.

    if (pDC) {
    CFont FNT;
    ...
    }

    Jedenfalls beruhigt es mich, dass der Destruktor das macht, anderenfalls hätte ich jetzt Code von 15 Jahren umschreiben müssen


    Grüße

    FireHeart


    PS:ich schreibe die Artikel jetzt mit allen HTML Steuerzeichen, die ich so kenne...dann sieht's auch wieder strukturiert aus...aufwändig, aber es geht immerhin.

    Montag, 23. August 2010 09:14
  • Hallo Fire-Heart!

    Das "if (true)" war nur ein einfaches Beispiel, um die "Lebensdauer" des
    CFont Objektes übersichtlich einzugrenzen.

    Natürlich schreibe ich das nicht genau so in dieser Form, sondern z.B.

    if (pDC) {
    CFont FNT;
    ... }

    Aber Du brachst kein if für solch einen Block:

    void Foo()
    {
      {
        // Scope 1
        CFont f;
        ...
      }
    ...
      {
        // Scope 2
        CFont f;
        ...
      }
    }

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Montag, 23. August 2010 09:19
    Moderator
  • Hallo Martin

    Jetzt weiß ich, was Du meinst. Natürlich wäre es so auch gegangen

    Ich hab aber sowieso zumeist noch irgendeine Abfrage oder auch eine for-Schleife davor...

    Grüße

    FireHeart

    Montag, 30. August 2010 05:05