FreeBSD Manual Pages
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)
NAME | Synopsis | Parameters | Return value | Notes | Example | Output: | See also
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>
