Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Pointer auf nix zeigen lassen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.10.2007, 15:05 Uhr
mischa
Fragender


Hallo,
sagen wir mal ich habe einen Pointer auf eine Klasse.
class A
{
A();
~A();
};
...
A* a;

und ich will jetzt diesen Pointer nach einer Benutzung auf nix zeigen lassen. Reicht es einfach a=NULL; zu machen oder muss ich delete benutzen. Irgend wie sitze ich grad auf dem Schlauch will aber auf Nummer sicher gehen.
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.10.2007, 15:19 Uhr
xXx
Devil


Naja also mit delete gibst du den Speicherbereich frei, den du mit new anforderst(delete [] für new []). Mit einer Zuweisung von NULL lenkst du nur den Zeiger um. Wenn du dir vorher nicht merkst auf was der Zeiger gezeigt hat, bekommst du ein Speicherleck, da du den Speicher ja dann nicht mehr freigeben kannst:


C++:
class foo
{};

int main()
{
    foo* inst = new foo;
    foo* ptr = inst;
    inst = NULL; // Das ist in Ordnung!
    delete ptr;
}
Was nicht in Ordnung ist:

C++:
class foo
{};

int main()
{
    foo* inst = new foo;
    inst = NULL;
}
, da du so nicht mehr den angeforderten Bereich freigeben kannst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.10.2007, 15:22 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Es gibt kein "nix".
Ein Pointer zeigt immer auf eine Adresse im Speicher egal ob die jetzt 0, 1 oder 13363 ist.
Es ist aber üblich einen Zeiger auf 0 zeigen zu lassen um zu signalisieren das er nicht im Gebrauch ist, weil du auf der Adresse 0 normalerweise eh nichts machen darfst.

delete musst du benutzen um von dir reservierten Speicher auf den der Pointer zeigt wieder frei zu geben. Das ändert deinen Pointer aber nicht, so dass der nach dem delete immer noch an die selbe Stelle zeigt, nur das die dir dann nicht mehr gehört.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.10.2007, 15:51 Uhr
mischa
Fragender


Also wenn ich kein Speicher reserviere reicht es wenn ich den Pointer einfach auf 0 zeigen lasse um zu zeigen das er nicht mehr benutzt wird. Danke
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: