Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::weak_ptr<T>::owner_before

      From cppreference.com
      <cpp‎ |memory‎ |weak ptr

      [edit template]
       
       
      Memory management library
      (exposition only*)
      Allocators
      Uninitialized memory algorithms
      Constrained uninitialized memory algorithms
      Memory resources
      Uninitialized storage(until C++20)
      (until C++20*)
      (until C++20*)
      Garbage collector support(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
      (C++11)(until C++23)
       
       
      template<class Y>
      bool owner_before(const weak_ptr<Y>& other)constnoexcept;
      template<class Y>
      bool owner_before(conststd::shared_ptr<Y>& other)constnoexcept;

      Checks whether thisweak_ptr precedesother in implementation defined 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 byget() are different (e.g. because 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 throughstd::owner_less.

      Contents

      [edit]Parameters

      other - thestd::shared_ptr orstd::weak_ptr to be compared

      [edit]Return value

      true if*this precedesother,false otherwise. Common implementations compare the addresses of the control blocks.

      [edit]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 truep3 < p2 falsep2.owner_before(p3) falsep3.owner_before(p2) falsew2.owner_before(w3) falsew3.owner_before(w2) false

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 2083C++11owner_before was not declaredconstdeclaredconst
      LWG 2942C++11owner_before was not declarednoexceptdeclarednoexcept

      [edit]See also

      (C++11)
      provides mixed-type owner-based ordering of shared and weak pointers
      (class template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/weak_ptr/owner_before&oldid=119637"

      [8]ページ先頭

      ©2009-2025 Movatter.jp