Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Grundfrage zur Speicherverwaltung ...

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
25.05.2005, 11:29 Uhr
BartS



Hallo,

ich weise einem Zeiger im Laufe meines Programmes merhfach ein neues Objekt zu:


Code:
htObjectIDs = new HashTable<string>();


Muss ich jetzt irgendwie dafür sorgen, dass die alten Objekte jeweils zerstört werden? Oder übernimmt das C++ für mich?
Wie müsste ich es im Fall der Fälle anstellen?

Habt vielen Dank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.05.2005, 12:01 Uhr
Th



Speicher, der mit new angelegt wird, muß mit delete wieder gelöscht werden, also
am besten

C++:
HashTable<string> *g_htObjectIDs = 0; // oder in Klassen als Member m_htObjectIDs

delete g_htObjectIDs;
g_htObjectIDs = new HashTable<string>();


Oder am besten eine Klasse erstellen, und im Destruktor dann delete aufrufen bzw. vor einer Neuzuweisung. Wichtig ist, dafür keine lokale Variable zu verwenden, außer die HashTable wird nur lokal in einer Funktion genutzt, aber dann schreibst du besser:

C++:
{
   HashTable<string> ht;

   ht.DoSomething();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.05.2005, 12:08 Uhr
0xdeadbeef
Gott
(Operator)


Erst erstellen, dann löschen:

C++:
HashTable<string> *ht = new Hashtable<string>();

// benutzen

delete ht;


Besser ist aber in der Regel auto_ptr:

C++:
#include <memory>
using namespace std;
// ...

auto_ptr<HashTable<string> > ht(new HashTable<string>());


...oder den Kram halt gleich auf dem Stack ablegen, wenn man ihn nur lokal braucht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 25.05.2005 um 12:08 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.06.2005, 15:18 Uhr
~Marv
Gast


also geht das auch so?

C++:
HashTable *ht;
for(int i=0; i<1000; i++)
{
ht = new HashTable();

// benutzen

delete ht;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.06.2005, 18:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
HashTable *ht;
for(int i=0; i<1000; i++)
{
ht = new HashTable();

// benutzen

delete ht;
}


Prinzipiell ja aber ich kann mir nur wenige Fälle vorstellen in denen es sinnvoll sein könnte in einer Schleife ständig ein neues Objekt zu konstruieren und wieder zu zerstören. Scheint mir dann eher ein Desingfehler vorzuliegen...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 01.06.2005 um 18:10 Uhr von Windalf editiert.
 
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: