enable_shared_from_this — Klasa
Pomaga wygenerować element shared_ptr
.
Składnia
class enable_shared_from_this {
public:
shared_ptr<Ty>
shared_from_this();
shared_ptr<const Ty> shared_from_this() const;
weak_ptr<T> weak_from_this() noexcept;
weak_ptr<T const> weak_from_this() const noexcept;
protected:
enable_shared_from_this();
enable_shared_from_this(const enable_shared_from_this&);
enable_shared_from_this& operator=(const enable_shared_from_this&);
~enable_shared_from_this();
};
Parametry
Ty
Typ kontrolowany przez wskaźnik udostępniony.
Uwagi
Obiekty pochodzące z enable_shared_from_this
programu mogą używać shared_from_this
metod w funkcjach członkowskich do tworzenia shared_ptr właścicieli wystąpienia, które współdzielą własność istniejącym shared_ptr
właścicielom. W przeciwnym razie, jeśli utworzysz nowy shared_ptr
przy użyciu metody this
, różni się od istniejących shared_ptr
właścicieli, co może prowadzić do nieprawidłowych odwołań lub spowodować usunięcie obiektu więcej niż raz.
Konstruktory, destruktor i operator przypisania są chronione, aby zapobiec przypadkowemu niewłaściwemu użyciu. Typ argumentu szablonu Ty musi być typem klasy pochodnej.
Aby zapoznać się z przykładem użycia, zobacz enable_shared_from_this::shared_from_this.
shared_from_this
Generuje element, który shared_ptr
współdzieli własność wystąpienia z istniejącymi shared_ptr
właścicielami.
shared_ptr<T> shared_from_this();
shared_ptr<const T> shared_from_this() const;
Uwagi
Podczas uzyskiwania obiektów z klasy bazowej enable_shared_from_this
funkcje składowe szablonu zwracają obiekt klasy shared_ptr, który współdzieli własność tego wystąpienia z istniejącymi shared_ptr
właścicielami.shared_from_this
W przeciwnym razie, jeśli utworzysz nowy shared_ptr
element z this
klasy , różni się od istniejących shared_ptr
właścicieli, co może prowadzić do nieprawidłowych odwołań lub spowodować usunięcie obiektu więcej niż raz. Zachowanie jest niezdefiniowane, jeśli wywołujesz shared_from_this
wystąpienie, które nie jest jeszcze własnością shared_ptr
obiektu.
Przykład
// std_memory_shared_from_this.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
using namespace std;
struct base : public std::enable_shared_from_this<base>
{
int val;
shared_ptr<base> share_more()
{
return shared_from_this();
}
};
int main()
{
auto sp1 = make_shared<base>();
auto sp2 = sp1->share_more();
sp1->val = 3;
cout << "sp2->val == " << sp2->val << endl;
return 0;
}
sp2->val == 3
weak_from_this
weak_ptr<T> weak_from_this() noexcept;
weak_ptr<T const> weak_from_this() const noexcept;