다음을 통해 공유


enable_shared_from_this 클래스

shared_ptr을 생성할 수 있습니다.

구문

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();
};

매개 변수

Ty
공유 포인터에 의해 제어되는 형식입니다.

설명

enable_shared_from_this에서 파생된 개체는 멤버 함수에서 shared_from_this 메서드를 사용하여 기존 shared_ptr 소유자와 소유권을 공유하는 인스턴스의 shared_ptr 소유자를 만듭니다. 그렇지 않으면 this를 사용하여 새 shared_ptr를 만들 경우 기존 shared_ptr 소유자와 완전히 다르므로 잘못된 참조가 발생하거나 개체가 두 번 이상 삭제될 수 있습니다.

실수로 잘못 사용하는 것을 방지할 수 있도록 생성자, 소멸자 및 대입 연산자가 보호됩니다. 템플릿 인수 형식 Ty 는 파생 클래스의 형식이어야 합니다.

사용법에 대한 예제는 enable_shared_from_this::shared_from_this를 참조하세요.

shared_from_this

인스턴스 소유권을 기존 shared_ptr 소유자와 공유하는 shared_ptr를 생성합니다.

shared_ptr<T> shared_from_this();
shared_ptr<const T> shared_from_this() const;

설명

개체가 enable_shared_from_this 기본 클래스에서 파생될 경우 shared_from_this 템플릿 멤버 함수는 이 인스턴스의 소유권을 기존 shared_ptr 소유자와 공유하는 shared_ptr 클래스 개체를 반환합니다. 그렇지 않으면 this에서 새 shared_ptr를 만들 경우 기존 shared_ptr 소유자와 완전히 다르므로 잘못된 참조가 발생하거나 개체가 두 번 이상 삭제될 수 있습니다. shared_ptr 개체가 아직 소유하지 않은 인스턴스에서 shared_from_this를 호출하면 동작이 정의 해제됩니다.

예시

// 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;