Namespaces
Variants
Views
Actions

std::weak_ptr

From cppreference.com
< cpp‎ | memory
Revision as of 14:51, 2 November 2012 by P12bot (Talk | contribs)

 
 
 
 
 
Defined in header <memory>
template< class T > class weak_ptr;
(since C++11)

std::weak_ptr is a smart pointer that holds a non-owning ("weak") reference to an object that is managed by std::shared_ptr. It must be converted to std::shared_ptr in order to access the referenced object.

std::weak_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.

Contents

Member types

Member type Definition
element_type T

Member functions

Template:cpp/memory/weak ptr/dcl list constructorTemplate:cpp/memory/weak ptr/dcl list destructorTemplate:cpp/memory/weak ptr/dcl list operator=Template:cpp/memory/weak ptr/dcl list resetTemplate:cpp/memory/weak ptr/dcl list swapTemplate:cpp/memory/weak ptr/dcl list use countTemplate:cpp/memory/weak ptr/dcl list expiredTemplate:cpp/memory/weak ptr/dcl list lockTemplate:cpp/memory/weak ptr/dcl list owner before
Modifiers
Observers

Non-member functions

Template:cpp/memory/weak ptr/dcl list swap2

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