Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::weak_ptr::lock(3)	      C++ Standard Libary	std::weak_ptr::lock(3)

NAME
       std::weak_ptr::lock - std::weak_ptr::lock

Synopsis
	  std::shared_ptr<T> lock() const noexcept;  (since C++11)

	  Creates  a  new std::shared_ptr that shares ownership	of the managed
       object. If there
	  is no	managed	 object,  i.e.	*this  is  empty,  then	 the  returned
       shared_ptr also is
	  empty.

	  Effectively	  returns     expired()	    ?	  shared_ptr<T>()    :
       shared_ptr<T>(*this), executed
	  atomically.

Parameters
	  (none)

Return value
	  A  shared_ptr	 which	shares	ownership  of  the  owned  object   if
       std::weak_ptr::expired
	  returns  false.  Else	returns	default-constructed shared_ptr of type
       T.

Notes
	  Both this function and the constructor  of  std::shared_ptr  may  be
       used to acquire
	  temporary   ownership	 of  the  managed  object  referred  to	 by  a
       std::weak_ptr. The
	  difference is	that the constructor of	std::shared_ptr	throws an  ex-
       ception when its
	  std::weak_ptr	argument is empty, while std::weak_ptr<T>::lock() con-
       structs an empty
	  std::shared_ptr<T>.

Example
       // Run this code

	#include <iostream>
	#include <memory>

	void observe(std::weak_ptr<int>	weak)
	{
	    if (auto observe = weak.lock()) {
		std::cout  << "\tobserve() able	to lock	weak_ptr<>, value=" <<
       *observe	<< "\n";
	    } else {
		std::cout << "\tobserve() unable to lock weak_ptr<>\n";
	    }
	}

	int main()
	{
	    std::weak_ptr<int> weak;
	    std::cout << "weak_ptr<> not yet initialized\n";
	    observe(weak);

	    {
		auto shared = std::make_shared<int>(42);
		weak = shared;
		std::cout << "weak_ptr<> initialized with shared_ptr.\n";
		observe(weak);
	    }

	    std::cout <<  "shared_ptr<>	 has  been  destructed	due  to	 scope
       exit.\n";
	    observe(weak);
	}

Output:
	weak_ptr<> not yet initialized
		observe() unable to lock weak_ptr<>
	weak_ptr<> initialized with shared_ptr.
		observe() able to lock weak_ptr<>, value=42
	shared_ptr<> has been destructed due to	scope exit.
		observe() unable to lock weak_ptr<>

	 Defect	reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	     DR	       Applied	   to		   Behavior    as    published
       Correct behavior
			      lock() was not required to be atomic, but
	  LWG 2316 C++11      required to be noexcept, which led to a	speci-
       fied to be atomic
			      contradiction

See also
	  expired checks whether the referenced	object was already deleted
		  (public member function)

http://cppreference.com		  2022.07.31		std::weak_ptr::lock(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::weak_ptr::lock&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help