Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » 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
11.05.2005, 14:42 Uhr
~lisan
Gast


Hi,

Ich schreibe an einem Netzwerk-Simulationsprogram.
Bei bestimmten Typen von Simulationen ist es notwendig das zu simulierende Netz immer wieder von vorne an zu durchlaufen.
D.h. ich muss das sehr komplex gestaltete Netz immer wieder in den Urzustand wie nach Programstart zurueckversetzen, nicht das gesamte Program, nur eben einen Teil davon, das Netz und seine Komponenten.
Gibt es eine Moeglichkeit ohne vielfaltige und wieder komplexe und fehleranfaellige ResetMethoden in den Netzkomponenten welche Speicher wieder freigeben, Attribute zuruecksetzen etc. eine Klasse in ihren Urzustand zurueckzuversetzen ?
So etwas wie memcopy nur eben schon komplexer.

Ich habe angefangen resets zu schreiben, dabei treten immer wieder Probleme folgender Art auf.
Mehere Komponenten besitzen Referenzen auf dieselbe Instanz. D.h. ich kann bei einem delete nich wissen, ob eine andere Komponente dies schon zuvor getan hat - segm. fault laesst gruessen.
Nun koennte ich mit Doppelzeigern arbeiten was aber grosse aenderungen im code mit sich fuehrt, ausserdem denke ich dass ich das Problem von der falschen Seite angehe, da man sich irgendwie den Initialen zustand von Klassen egal welcher Art merken koennen muesste.

Ideen ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.05.2005, 15:25 Uhr
ao

(Operator)


Zwei Ansätze:

a) Jede Instanz merkt sich, ob sie sich im Initial-Zustand befindet (d.h. zuletzt konstruiert oder rückgesetzt wurde) oder nicht. Wenn ja, bleibt ein erneuter Aufruf von Reset ohne Wirkung.

b) Formuliere die Reset- Methoden so, dass es nicht schadet, wenn sie mehrfach aufgerufen werden. D.h. wenn im Reset Speicher freigegeben werden soll, dann mach es so, dass man es dem p ansieht, ob es auf gültigen Speicher zeigt:

C++:
if (p)
{
    delete p;
    p = 0;
}



ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.05.2005, 12:06 Uhr
~lisan
Gast


Nun, leider ist das problem nun so, dass wenn ich p auf NULL setze, ist das innerhalb der instanz ok, aber eine andere instanz bei welcher p auf dieselbe adresse zeigt ist ihr attribut p nicht NULL ! und ungueltig une man weiss es eben nicht.

Das ganze loest man in der regel ueber doppelzeiger **p mit delete *p und *p = NULL.

Ich wollte nur um solche umfangreichen aenderungen herumkommen, ich moechte eigendlich keine reset methoden schreiben muessen. Am liebsten waere es mir, wenn ich mir die klassen in ihrem urzustand mit memcopy oder so etwas merken koennte. Das ganz muss naemlich sehr schnell gehen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.05.2005, 17:06 Uhr
ao

(Operator)


Dann sollte jenes Attribut p eben kein "blödes Stück Speicher" sein, sondern selber eine Klasseninstanz, die genug Eigenintelligenz mitbringt, um zu wissen, in welchem Zustand sie ist.

Du kommst wahrscheinlich in Teufels Küche, wenn du dein Programm so designst, dass jeder über den anderen Bescheid wissen muss. Ein kleiner Fehler, und alles kracht zusammen.
 
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: