Aracılığıyla paylaş


enable_shared_from_this Sınıfı

bir oluşturulmasına shared_ptryardı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 thisyeni 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 thisyeni 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;