std::shared_ptr<T> mit T forward deklariert
-
Hey,
bei
class T; std::shared_ptr<T> Ptr; class T { };gab es doch irgendein Problem mit dem Destruktoraufruf, weil T erstmal nur forward-deklariert ist, oder? Zu welchem Zeitpunkt muss denn wo was bekannt sein?
-
der shared ptr braucht nur eine vorherige deklaration
der speichert intern ja nur den zeiger, daher ist keine definition erforderlich
-
Ok, perfekt. Ich danke Dir!
-
Beim Konstruktoraufruf mit einem Zeiger muss der Typ aber vollständig sein, damit der
shared_ptrweiss, wie er dasdeleteausführen kann.
-
Skym0sh0 schrieb:
der shared ptr braucht nur eine vorherige deklaration
der speichert intern ja nur den zeiger, daher ist keine definition erforderlichGilt meines Wissens nach nur für unique_ptr.
-
314159265358979 schrieb:
Gilt meines Wissens nach nur für unique_ptr.
Nein, auch für
shared_ptr, steht übrigens in der Doku.The class template is parameterized on T, the type of the object pointed to. shared_ptr and most of its member functions place no requirements on T; it is allowed to be an incomplete type, or void
Hier sähe man ausserdem einen Vergleich der beiden im Bezug auf vollständige Typen.
-
314159265358979 schrieb:
Skym0sh0 schrieb:
der shared ptr braucht nur eine vorherige deklaration
der speichert intern ja nur den zeiger, daher ist keine definition erforderlichGilt meines Wissens nach nur für unique_ptr.
Für unique_ptr gilt es eben gerade nicht, sondern nur für shared_ptr.
Wenn man keine Ahnung hat, einfach mal die Fresse halten.
-
hustbaer schrieb:
314159265358979 schrieb:
Skym0sh0 schrieb:
der shared ptr braucht nur eine vorherige deklaration
der speichert intern ja nur den zeiger, daher ist keine definition erforderlichGilt meines Wissens nach nur für unique_ptr.
Für unique_ptr gilt es eben gerade nicht, sondern nur für shared_ptr.
Wenn man keine Ahnung hat, einfach mal die Fresse halten.
Wann heiratet ihr 2?
-
hustbaer schrieb:
Für unique_ptr gilt es eben gerade nicht, sondern nur für shared_ptr.
Okay, dann habe ich das verwechselt

hustbaer schrieb:
Wenn man keine Ahnung hat, einfach mal die Fresse halten.
:****