enable_shared_from_this Sınıfı
bir oluşturulmasına shared_ptr
yardımcı olur.
Sözdizimi
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();
};
Parametreler
Ty
Paylaşılan işaretçi tarafından denetlenen tür.
Açıklamalar
öğesinden enable_shared_from_this
türetilen nesneler, mevcut shared_ptr
sahiplerle sahipliği paylaşan örneğin shared_ptr sahiplerini oluşturmak için üye işlevlerindeki yöntemleri kullanabilirshared_from_this
. Aksi takdirde, kullanarak this
yeni shared_ptr
bir oluşturursanız, bu, geçersiz başvurulara yol açabilecek veya nesnenin birden çok kez silinmesine neden olabilecek mevcut shared_ptr
sahiplerden farklıdır.
Oluşturucular, yıkıcı ve atama işleci yanlışlıkla kötüye kullanımı önlemeye yardımcı olmak için korunur. Ty şablon bağımsız değişken türü türetilmiş sınıfın türü olmalıdır.
Kullanım örneği için bkz . enable_shared_from_this::shared_from_this.
shared_from_this
Örneğin sahipliğini mevcut shared_ptr
sahiplerle paylaşan bir shared_ptr
oluşturur.
shared_ptr<T> shared_from_this();
shared_ptr<const T> shared_from_this() const;
Açıklamalar
Temel sınıftan enable_shared_from_this
nesne türetdiğinizde, shared_from_this
şablon üyesi işlevleri bu örneğin sahipliğini mevcut shared_ptr
sahiplerle paylaşan bir shared_ptr Sınıfı nesnesi döndürür. Aksi takdirde, öğesinden this
yeni shared_ptr
bir oluşturursanız, bu, geçersiz başvurulara yol açabilecek veya nesnenin birden çok kez silinmesine neden olabilecek mevcut shared_ptr
sahiplerden farklıdır. Zaten bir nesneye ait shared_ptr
olmayan bir örneği çağırırsanız shared_from_this
davranış tanımsız olur.
Örnek
// 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;