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_ptr weiss, wie er das delete ausführen kann.



  • Skym0sh0 schrieb:

    der shared ptr braucht nur eine vorherige deklaration
    der speichert intern ja nur den zeiger, daher ist keine definition erforderlich

    Gilt 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 erforderlich

    Gilt 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 erforderlich

    Gilt 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.

    :****


Anmelden zum Antworten