Tidy UnownedPtr<> as a result of previous simplification. - Remove non-useful helper method Reset(), - Default methods where possible. - Use std::exchange() in place of a swap. Bug: pdfium:2038 Change-Id: Idd0b854b905c9e7ce491398909cf0dd0d3a2ece7 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/112413 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcrt/unowned_ptr.h b/core/fxcrt/unowned_ptr.h index 039ec7e..b1b9171 100644 --- a/core/fxcrt/unowned_ptr.h +++ b/core/fxcrt/unowned_ptr.h
@@ -83,8 +83,7 @@ // Copy-construct an UnownedPtr. // Required in addition to copy conversion constructor below. - constexpr UnownedPtr(const UnownedPtr& that) noexcept - : m_pObj(static_cast<T*>(that)) {} + constexpr UnownedPtr(const UnownedPtr& that) noexcept = default; // Move-construct an UnownedPtr. After construction, |that| will be NULL. // Required in addition to move conversion constructor below. @@ -95,41 +94,37 @@ template <class U, typename = typename std::enable_if< std::is_convertible<U*, T*>::value>::type> - UnownedPtr(const UnownedPtr<U>& that) : UnownedPtr(static_cast<U*>(that)) {} + UnownedPtr(const UnownedPtr<U>& that) : m_pObj(static_cast<U*>(that)) {} // Move-conversion constructor. template <class U, typename = typename std::enable_if< std::is_convertible<U*, T*>::value>::type> - UnownedPtr(UnownedPtr<U>&& that) noexcept { - Reset(that.ExtractAsDangling()); - } + UnownedPtr(UnownedPtr<U>&& that) noexcept + : m_pObj(that.ExtractAsDangling()) {} // Assign an UnownedPtr from nullptr. UnownedPtr& operator=(std::nullptr_t) noexcept { - Reset(); + m_pObj = nullptr; return *this; } // Assign an UnownedPtr from a raw ptr. UnownedPtr& operator=(T* that) noexcept { - Reset(that); + m_pObj = that; return *this; } // Copy-assign an UnownedPtr. // Required in addition to copy conversion assignment below. - UnownedPtr& operator=(const UnownedPtr& that) noexcept { - if (*this != that) - Reset(static_cast<T*>(that)); - return *this; - } + UnownedPtr& operator=(const UnownedPtr& that) noexcept = default; // Move-assign an UnownedPtr. After assignment, |that| will be NULL. // Required in addition to move conversion assignment below. UnownedPtr& operator=(UnownedPtr&& that) noexcept { - if (*this != that) - Reset(that.ExtractAsDangling()); + if (*this != that) { + m_pObj = that.ExtractAsDangling(); + } return *this; } @@ -138,8 +133,9 @@ typename = typename std::enable_if< std::is_convertible<U*, T*>::value>::type> UnownedPtr& operator=(const UnownedPtr<U>& that) noexcept { - if (*this != that) - Reset(that); + if (*this != that) { + m_pObj = static_cast<U*>(that); + } return *this; } @@ -148,8 +144,9 @@ typename = typename std::enable_if< std::is_convertible<U*, T*>::value>::type> UnownedPtr& operator=(UnownedPtr<U>&& that) noexcept { - if (*this != that) - Reset(that.ExtractAsDangling()); + if (*this != that) { + m_pObj = that.ExtractAsDangling(); + } return *this; } @@ -168,21 +165,13 @@ operator T*() const noexcept { return m_pObj; } T* get() const noexcept { return m_pObj; } - T* ExtractAsDangling() { - T* pTemp = nullptr; - std::swap(pTemp, m_pObj); - return pTemp; - } + T* ExtractAsDangling() { return std::exchange(m_pObj, nullptr); } explicit operator bool() const { return !!m_pObj; } T& operator*() const { return *m_pObj; } T* operator->() const { return m_pObj; } private: - void Reset(T* obj = nullptr) { - m_pObj = obj; - } - UNOWNED_PTR_EXCLUSION T* m_pObj = nullptr; };