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

FreeBSD Manual Pages

  
 
  

home | help
std::weak_p...owner_before(3) C++ Standard Libarystd::weak_p...owner_before(3)

NAME
       std::weak_ptr::owner_before - std::weak_ptr::owner_before

Synopsis
	  template< class Y >
	  bool owner_before( const weak_ptr<Y>&	other )	const noexcept;
	  template< class Y >
	  bool owner_before( const std::shared_ptr<Y>& other ) const noexcept;

	  Checks  whether  this	 weak_ptr precedes other in implementation de-
       fined owner-based
	  (as opposed to value-based) order. The order is such that two	 smart
       pointers	compare
	  equivalent  only if they are both empty or if	they both own the same
       object, even if
	  the values of	the pointers obtained by get() are different (e.g. be-
       cause they point
	  at different subobjects within the same object)

	  This ordering	is used	to make	shared and  weak  pointers  usable  as
       keys in associative
	  containers, typically	through	std::owner_less.

Parameters
	  other	- the std::shared_ptr or std::weak_ptr to be compared

Return value
	  true	if  *this  precedes other, false otherwise. Common implementa-
       tions compare the
	  addresses of the control blocks.

Example
       // Run this code

	#include <iostream>
	#include <memory>

	struct Foo {
	    int	n1;
	    int	n2;
	    Foo(int a, int b) :	n1(a), n2(b) {}
	};
	int main()
	{
	    auto p1 = std::make_shared<Foo>(1, 2);
	    std::shared_ptr<int> p2(p1,	&p1->n1);
	    std::shared_ptr<int> p3(p1,	&p1->n2);

	    std::cout << std::boolalpha
		      << "p2 < p3 " << (p2 < p3) << '\n'
		      << "p3 < p2 " << (p3 < p2) << '\n'
		      << "p2.owner_before(p3) "	<< p2.owner_before(p3) << '\n'
		      <<  "p3.owner_before(p2)	"  <<  p3.owner_before(p2)  <<
       '\n';

	    std::weak_ptr<int> w2(p2);
	    std::weak_ptr<int> w3(p3);
	    std::cout
	//		<< "w2 < w3 " << (w2 < w3) << '\n'  // won't compile
	//		<< "w3 < w2 " << (w3 < w2) << '\n'  // won't compile
		      << "w2.owner_before(w3) "	<< w2.owner_before(w3) << '\n'
		      <<  "w3.owner_before(w2)	"  <<  w3.owner_before(w2)  <<
       '\n';

	}

Output:
	p2 < p3	true
	p3 < p2	false
	p2.owner_before(p3) false
	p3.owner_before(p2) false
	w2.owner_before(w3) false
	w3.owner_before(w2) false

	 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
	  LWG  2873  C++11	 owner_before  might  not be declared noexcept
       declared	noexcept
	  LWG 2942 C++11      weak_ptr::owner_before is	missed in  LWG	2873's
       made noexcept
			      resolution

See also
	  owner_less  provides	mixed-type  owner-based	ordering of shared and
       weak pointers
	  (C++11)    (class template)

http://cppreference.com		  2022.07.31	 std::weak_p...owner_before(3)

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

home | help