enable_shared_from_this – třída
Pomáhá vygenerovat shared_ptr
.
Syntaxe
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 řízený sdíleným ukazatelem.
Poznámky
Objekty odvozené z enable_shared_from_this
můžou používat shared_from_this
metody v členských funkcích k vytvoření shared_ptr vlastníků instance, které sdílejí vlastnictví s existujícími shared_ptr
vlastníky. Jinak pokud vytvoříte nový shared_ptr
pomocí , this
liší se od stávajících shared_ptr
vlastníků, což může vést k neplatným odkazům nebo způsobit odstranění objektu více než jednou.
Konstruktory, destruktor a operátor přiřazení jsou chráněné, aby se zabránilo náhodnému zneužití. Typ argumentu šablony Ty musí být typem odvozené třídy.
Příklad použití najdete v tématu enable_shared_from_this::shared_from_this.
shared_from_this
Vygeneruje, která sdílí vlastnictví instance se stávajícími shared_ptr
vlastníkyshared_ptr
.
shared_ptr<T> shared_from_this();
shared_ptr<const T> shared_from_this() const;
Poznámky
Když odvozujete objekty ze enable_shared_from_this
základní třídy, shared_from_this
členské funkce šablony vrátí objekt třídy shared_ptr , který sdílí vlastnictví této instance s existujícími shared_ptr
vlastníky. Jinak pokud vytvoříte nový shared_ptr
z this
, liší se od stávajících shared_ptr
vlastníků, což může vést k neplatným odkazům nebo způsobit odstranění objektu více než jednou. Chování není definováno, pokud voláte shared_from_this
instanci, která ještě není vlastníkem objektu shared_ptr
.
Příklad
// 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;