Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zwickmühle: const-Pointer

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
31.10.2006, 23:21 Uhr
divB



Hallo!

Ich habe Objekte "Thread". Diese sind nicht eindeutig in einer einzelnen Liste organsisiert, jedoch muss trotzdem jedes Objekt eindeutig sein (PID). Die Eindeutigkeit würd über eine Klassenvariable gewährleistet, zugwiesen über die statische Methode Thread::getFreePid()

Nun will ich ein fork() implementieren, wozu ich ja ein Thread-Objekt kopieren muss, das will ich mit dem Copyconstructor machen.

Vernünftigerweise übergibt man dem Copyconstructor eine const-Referenz.

Jetzt will ich aber auch die Eltern/Kindrelationen abspeichern. Ich will jetzt src nach dst kopieren und dabei in dst einen Verweis auf den Vater speichern (parent) und dst in src in einer Liste children hinzufügen.
Leider sind nun jegliche Referenzen "const" und der Compiler lässt mich daher die Pointer/Referenzen nicht zuweisen.

Wie mache ich das am besten?
Ich könnte (wahrscheinlich) den Parameter beim Copyconstructor nicht const machen - aber ist das vernünftig nur weil ich einen Pointer auf das jeweilige andere Objekt abspeichern will?

Ich könnte den const auch wegcasten aber tut man das?

Was empfehlt ihr mir hier?

Vielen Dank!

mfg,
divB
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.11.2006, 08:42 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
const wegcasten ist ganz schlecht, denn so sieht man von außen nicht "da wird mein objekt verändert!". Darum const weglassen und gut ist. const ist ja eine Hilfestellung für den Menschen, nicht für die Maschine.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.11.2006, 00:01 Uhr
ao

(Operator)



Zitat von divB:
Ich könnte (wahrscheinlich) den Parameter beim Copyconstructor nicht const machen

Dann ist es kein Kopierkonstruktor mehr. Ein Kopierer, der das Original verändern kann - wo kommen wir da hin?

Ich sehe zwei Möglichkeiten:

1. die Kinderliste mit "mutable" deklarieren, dann kann sie "mutieren", ohne dass ein Compilerfehler kommt.

2. - meines Erachtens die bessere Lösung -: Fork ist kein Fall für einen Kopierkonstruktor. Beim Kopieren entsteht eine Kopie, die gleichrangig neben dem Original steht und die keine Vater-Kind-Beziehung zu ihm hat. Schreib stattdessen eine Memberfunktion

C++:
class Thread
{
public:
    Thread & Fork ();
};


die einen neuen Thread abspaltet und diesen in this->children einfügt.

ao
 
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: