Benutzer mit den meisten Antworten
Resourcen freigeben?

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
Antworten
-
- Als Antwort markiert Fire-Heart Montag, 23. August 2010 09:09
Alle Antworten
-
- Als Antwort markiert Fire-Heart Montag, 23. August 2010 09:09
-
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.
-
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