이름공간
변수

std::weak_ptr

cppreference.com
 
 
 
 
 
<tbody> </tbody>
<memory> 에 정의되어 있음.
template< class T > class weak_ptr;
(since C++11)

std::weak_ptrstd::shared_ptr가 관리하는 객체를 참조하는 비소유("약한") 참조를 가지는 스마트 포인터이다. 참조 객체를 사용하려면 반드시 std::shared_ptr로 변환해야 한다.

models temporary ownership: when an object needs to be accessed only if it exists, and it may be deleted at any time by someone else, std::weak_ptr is used to track the object, and it is converted to std::shared_ptr to assume temporary ownership. If the original std::shared_ptr is destroyed at this time, the object's lifetime is extended until the temporary std::shared_ptr is destroyed as well.

In addition, std::weak_ptr is used to break circular references of std::shared_ptr.

Member types

Member type Definition
element_type T

Member functions

creates a new weak_ptr
(public member function) [edit]
destroys a weak_ptr
(public member function) [edit]
assigns the weak_ptr
(public member function) [edit]
Modifiers
releases the ownership of the managed object
(public member function) [edit]
swaps the managed objects
(public member function) [edit]
Observers
returns the number of shared_ptr objects that manage the object
(public member function) [edit]
checks whether the referenced object was already deleted
(public member function) [edit]
creates a shared_ptr that manages the referenced object
(public member function) [edit]
provides owner-based ordering of weak pointers
(public member function) [edit]

Non-member functions

specializes the std::swap algorithm
(function template) [edit]

Example

Demonstrates how lock is used to ensure validity of the pointer.

#include <iostream>
#include <memory>

std::weak_ptr<int> gw;

void f()
{
    if (auto spt = gw.lock()) { // Has to be copied into a shared_ptr before usage
	std::cout << *spt << "\n";
    }
    else {
        std::cout << "gw is expired\n";
    }
}
 
int main()
{
    {
        auto sp = std::make_shared<int>(42);
	gw = sp;

	f();
    }

    f();
}

Output:

42
gw is expired