| Chromium Embedded Framework (CEF)
    128.0.1+gc234e7f+chromium-128.0.6613.7
    | 
A smart pointer class for reference counted objects. More...
#include "include/base/cef_scoped_refptr.h"
| Public Types | |
| typedef T | element_type | 
| Public Member Functions | |
| constexpr | scoped_refptr ()=default | 
| constexpr | scoped_refptr (std::nullptr_t) | 
| scoped_refptr (T *p) | |
| scoped_refptr (const scoped_refptr &r) | |
| template<typename U , typename = typename std::enable_if< std::is_convertible<U*, T*>::value>::type> | |
| scoped_refptr (const scoped_refptr< U > &r) | |
| scoped_refptr (scoped_refptr &&r) noexcept | |
| template<typename U , typename = typename std::enable_if< std::is_convertible<U*, T*>::value>::type> | |
| scoped_refptr (scoped_refptr< U > &&r) noexcept | |
| ~scoped_refptr () | |
| T * | get () const | 
| T & | operator* () const | 
| T * | operator-> () const | 
| scoped_refptr & | operator= (std::nullptr_t) | 
| scoped_refptr & | operator= (T *p) | 
| scoped_refptr & | operator= (scoped_refptr r) noexcept | 
| void | reset () | 
| T * | release () | 
| void | swap (scoped_refptr &r) noexcept | 
| operator bool () const | |
| template<typename U > | |
| bool | operator== (const scoped_refptr< U > &rhs) const | 
| template<typename U > | |
| bool | operator!= (const scoped_refptr< U > &rhs) const | 
| template<typename U > | |
| bool | operator< (const scoped_refptr< U > &rhs) const | 
| Protected Attributes | |
| T * | ptr_ = nullptr | 
| Friends | |
| class | ::base::SequencedTaskRunner | 
| class | ::base::WrappedPromise | 
| template<typename U > | |
| class | scoped_refptr | 
| template<typename U > | |
| scoped_refptr< U > | base::AdoptRef (U *) | 
A smart pointer class for reference counted objects.
Use this class instead of calling AddRef and Release manually on a reference counted object to avoid common memory leaks caused by forgetting to Release an object reference. Sample usage:
  class MyFoo : public RefCounted<MyFoo> {
   ...
   private:
    friend class RefCounted<MyFoo>;  // Allow destruction by RefCounted<>.
    ~MyFoo();                        // Destructor must be
    private/protected.
  };
  void some_function() {
    scoped_refptr<MyFoo> foo = MakeRefCounted<MyFoo>();
    foo->Method(param);
    // |foo| is released when this function returns
  }
  void some_other_function() {
    scoped_refptr<MyFoo> foo = MakeRefCounted<MyFoo>();
    ...
    foo.reset();  // explicitly releases |foo|
    ...
    if (foo)
      foo->Method(param);
  }
The above examples show how scoped_refptr<T> acts like a pointer to T. Given two scoped_refptr<T> classes, it is also possible to exchange references between the two objects, like so:
  {
    scoped_refptr<MyFoo> a = MakeRefCounted<MyFoo>();
    scoped_refptr<MyFoo> b;
    b.swap(a);
    // now, |b| references the MyFoo object, and |a| references nullptr.
  }
To make both |a| and |b| in the above example reference the same MyFoo object, simply use the assignment operator:
  {
    scoped_refptr<MyFoo> a = MakeRefCounted<MyFoo>();
    scoped_refptr<MyFoo> b;
    b = a;
    // now, |a| and |b| each own a reference to the same MyFoo object.
  }
Also see Chromium's ownership and calling conventions: https://chromium.googlesource.com/chromium/src/+/lkgr/styleguide/c++/c++.md#object-ownership-and-calling-conventions Specifically: If the function (at least sometimes) takes a ref on a refcounted object, declare the param as scoped_refptr<T>. The caller can decide whether it wishes to transfer ownership (by calling std::move(t) when passing t) or retain its ref (by simply passing t directly). In other words, use scoped_refptr like you would a std::unique_ptr except in the odd case where it's required to hold on to a ref while handing one to another component (if a component merely needs to use t on the stack without keeping a ref: pass t as a raw T*).
| typedef T scoped_refptr< T >::element_type | 
| 
 | constexprdefault | 
| 
 | inlineconstexpr | 
| 
 | inline | 
| 
 | inline | 
| 
 | inline | 
| 
 | inlinenoexcept | 
| 
 | inlinenoexcept | 
| 
 | inline | 
| 
 | inline | 
| 
 | inlineexplicit | 
| 
 | inline | 
| 
 | inline | 
| 
 | inline | 
| 
 | inline | 
| 
 | inlinenoexcept | 
| 
 | inline | 
| 
 | inline | 
| 
 | inline | 
| T * scoped_refptr< T >::release | 
| 
 | inline | 
| 
 | inlinenoexcept | 
| 
 | friend | 
| 
 | friend | 
| 
 | protected |