Namensräume
Varianten
Aktionen

std::enable_shared_from_this<T>::shared_from_this

Von cppreference.com
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek

Allocatoren
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
Explizites Lebenszeitmanagement
 
 
std::shared_ptr<T> shared_from_this();
(1) (seit C++11)
std::shared_ptr<T const> shared_from_this() const;
(2) (seit C++11)

Gibt einen std::shared_ptr<T> zurück, der sich die Besitzerschaft von *this mit allen bereits existierenden std::shared_ptr teilt, die auf *this verweisen.

Inhalt

[bearbeiten] Rückgabewert

std::shared_ptr<T>(weak_this )

[bearbeiten] Ausnahmen

Wenn shared_from_this auf einem Objekt aufgerufen wird, das nicht zuvor von einem std::shared_ptr geteilt wurde, wird std::bad_weak_ptr durch den std::shared_ptr-Konstruktor ausgelöst.

[bearbeiten] Beispiel

#include <iostream>
#include <memory>
 
struct Foo : public std::enable_shared_from_this<Foo>
{
    Foo() { std::cout << "Foo::Foo\n"; }
    ~Foo() { std::cout << "Foo::~Foo\n"; } 
    std::shared_ptr<Foo> getFoo() { return shared_from_this(); }
};
 
int main()
{
    Foo *f = new Foo;
    std::shared_ptr<Foo> pf1;
 
    {
        std::shared_ptr<Foo> pf2(f);
        pf1 = pf2->getFoo(); // shares ownership of object with pf2
    }
 
    std::cout << "pf2 is gone\n";   
}

Ausgabe

Foo::Foo
pf2 is gone
Foo::~Foo

[bearbeiten] Siehe auch

intelligenter Zeiger mit semantisch geteiltem Objektbesitz
(Klassen-Template) [edit]