Wenns nicht irgendwo anders noch ein ganz abstrusen Trick verwendet
wird, der die void Pointer braucht.
Wenn nicht, die member Variablen mit ihrem richtigen Typ anlegen, und
die Setter/Getter als normale Zugriffsfunktionen im Header
implementieren.
Oliver
Ich empfehle dir dich zuerst über Smartpointer zu informieren:
http://de.cppreference.com/w/cpp/memory/unique_ptrhttp://de.cppreference.com/w/cpp/memory
Smartpointer sind dazu da die Lebenszeit der Objekte auf die sie Zeigen
zu verwalten, und diese automatisch freizugeben wen sie nichtmehr
verwendet werden.
Den Unique Pointer kannst du nur verwenden, wenn du willst, das nur
dieser eine Pointer darauf existiert, und das Objekt automatisch
freigegeben wird sobald der Unique Pointer nichtmehr existiert.
Da wir nicht wissen, wozu der Pointer weiterverwendet wird, können wir
dir auch nicht sagen, ob du ihn hier verwenden kannst. Es ist aber
relativ wahrscheinlich, dass du normale Pointer verwenden kannst:
dominik_ schrieb:> Hallo, noch eine kurze Frage, bei diese:> bekomme ich diese Fehlermeldung:> error C2036: 'EclassHold*' : unknown size
Grundlagen! Der Compiler weiss wohl schon, dass EclassHold eine klasse
ist, aber nicht, was diese beinhaltet oder wie gross sie ist. Ersetze
die Implementierungen mit Prototypen und packe die Implementierung in
ein cpp file. Beim Cpp file bindest du alle klasse ein, die du benötigst
(A und EclassHold)
Hallo Daniel,
danke es funktioniert aber es ist mit sehr grosse vorsicht zu geniessen.
Die Ressourcen:
1
Bclass* m_Bclass;
2
DclassPool* m_DclassPool;
3
DclassPool* m_EclassHold;
teilen mehrere Zeigern. Also es kommt dann shared_ptr zu verwendung.
Da ich Visual Studio 2008 benutze, kann ich nicht die Neuerungen in C11
leider nicht davon gebarucht machen.
Ich habe die neue Boost1_60 Library runtergeladen und in Visual Studio
eingebunden.
Wie soll denn die Zeiger aussehen?
-> Hier ist meinen Versuch:
dominik_ schrieb:> Die Ressourcen:
...
> teilen mehrere Zeigern. Also es kommt dann shared_ptr zu verwendung.>> Da ich Visual Studio 2008 benutze, kann ich nicht die Neuerungen in C11> leider nicht davon gebarucht machen.
C11 ist der falsche Standard. Du meinst C++11.
> Wie soll denn die Zeiger aussehen?
...
> Ist das richtig so?
Das typedef gehört da nicht hin, es sei denn du möchtest Datentypen
statt Variablen definieren.
Braucht man boost da überhaupt? Geht das nicht ohne?
Letztens habe ich einen Vortrag gehört, deren Tenor war, dass boost
durch Features von C++-14 komplett ersetzt werden könnte.
Was ist der Vorteil, wenn man da immer noch diese Extra-Bibliothek
verwendet?
PittyJ schrieb:> Braucht man boost da überhaupt? Geht das nicht ohne?> Letztens habe ich einen Vortrag gehört, deren Tenor war, dass boost> durch Features von C++-14 komplett ersetzt werden könnte.> Was ist der Vorteil, wenn man da immer noch diese Extra-Bibliothek> verwendet?
boost ist eine Art (inoffizielle) Testbench für Dinge die zukünftig in
den Standard fließen und wenn er einen aktuelleren Compiler benutzen
würde, dann hättest Du recht, aber:
> Da ich Visual Studio 2008 benutze, kann ich nicht die Neuerungen in C11> leider nicht davon gebarucht machen.
Das Ding ist leider Steinzeit.
Und natürlich gibt es laufend neues in boost.
Wobei ich auch die Frage stellen würde, ob ein Umstieg auf eine
aktuellere Version nicht in Frage kommt, auch wenn dies ggf. mit
Anpassungen verbunden sein kann.
>
Wahrscheinlich eher nein. Wenn die Funktion eine zusätzliche Referenz
(nicht im C++ Sprachsinn) auf das übergebene Objekt speichern möchte,
dann braucht die Funktion den shared pointer. Aber auch dann spricht
wenig dagegen, die shared pointers per const Referenz zu übergeben:
1
static void fkt_1(
2
const boost::shared_ptr<Bclass>& bClass_p,
3
const boost::shared_ptr<DclassPool>& dClass_p);
4
...
Wenn die Funktion nur eine Referenz auf ein Objekt braucht, und diese
Referenz nicht optional ist (die Funktion nicht erwartet, dass der
Pointer 0 sein kann), dann solltest Du es durch eine C++ Referenz
ersetzen:
1
static void fkt_1(
2
Bclass& bClass_p,
3
DclassPool& dClass_p);
4
...
Im Idealfall nimmst Du Deine Umbauarbeiten zum Anlass, noch mal das
Thema const correctness in Deinem C++ Buch nachzuschlagen und dass ggf.
auch gerade zu ziehen.
mfg Torsten