Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(899)

Side by Side Diff: third_party/WebKit/Source/wtf/RefPtr.h

Issue 2696703008: Adds RefPtr::leakRef method to allow raw pointers that prevent destruct. (Closed)
Patch Set: Added deref in RefPtrTest.LeakRef to avoid memory leak. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. 2 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc.
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 // Hash table deleted values, which are only constructed and never copied or 63 // Hash table deleted values, which are only constructed and never copied or
64 // destroyed. 64 // destroyed.
65 RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) {} 65 RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) {}
66 bool isHashTableDeletedValue() const { 66 bool isHashTableDeletedValue() const {
67 return m_ptr == hashTableDeletedValue(); 67 return m_ptr == hashTableDeletedValue();
68 } 68 }
69 69
70 ALWAYS_INLINE ~RefPtr() { derefIfNotNull(m_ptr); } 70 ALWAYS_INLINE ~RefPtr() { derefIfNotNull(m_ptr); }
71 71
72 ALWAYS_INLINE T* get() const { return m_ptr; } 72 ALWAYS_INLINE T* get() const { return m_ptr; }
73 73 T* leakRef() WARN_UNUSED_RESULT;
74 void clear(); 74 void clear();
75 PassRefPtr<T> release() { 75 PassRefPtr<T> release() {
76 PassRefPtr<T> tmp = adoptRef(m_ptr); 76 PassRefPtr<T> tmp = adoptRef(m_ptr);
77 m_ptr = nullptr; 77 m_ptr = nullptr;
78 return tmp; 78 return tmp;
79 } 79 }
80 80
81 T& operator*() const { return *m_ptr; } 81 T& operator*() const { return *m_ptr; }
82 ALWAYS_INLINE T* operator->() const { return m_ptr; } 82 ALWAYS_INLINE T* operator->() const { return m_ptr; }
83 83
(...skipping 20 matching lines...) Expand all
104 T* m_ptr; 104 T* m_ptr;
105 }; 105 };
106 106
107 template <typename T> 107 template <typename T>
108 template <typename U> 108 template <typename U>
109 inline RefPtr<T>::RefPtr(const PassRefPtr<U>& o, 109 inline RefPtr<T>::RefPtr(const PassRefPtr<U>& o,
110 EnsurePtrConvertibleArgDefn(U, T)) 110 EnsurePtrConvertibleArgDefn(U, T))
111 : m_ptr(o.leakRef()) {} 111 : m_ptr(o.leakRef()) {}
112 112
113 template <typename T> 113 template <typename T>
114 inline T* RefPtr<T>::leakRef() {
115 T* ptr = m_ptr;
116 m_ptr = nullptr;
117 return ptr;
118 }
119
120 template <typename T>
114 inline void RefPtr<T>::clear() { 121 inline void RefPtr<T>::clear() {
115 T* ptr = m_ptr; 122 T* ptr = m_ptr;
116 m_ptr = nullptr; 123 m_ptr = nullptr;
117 derefIfNotNull(ptr); 124 derefIfNotNull(ptr);
118 } 125 }
119 126
120 template <typename T> 127 template <typename T>
121 template <typename U> 128 template <typename U>
122 inline RefPtr<T>& RefPtr<T>::operator=(RefPtrValuePeeker<U> optr) { 129 inline RefPtr<T>& RefPtr<T>::operator=(RefPtrValuePeeker<U> optr) {
123 RefPtr ptr = static_cast<U*>(optr); 130 RefPtr ptr = static_cast<U*>(optr);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 213
207 private: 214 private:
208 T* m_ptr; 215 T* m_ptr;
209 }; 216 };
210 217
211 } // namespace WTF 218 } // namespace WTF
212 219
213 using WTF::RefPtr; 220 using WTF::RefPtr;
214 221
215 #endif // WTF_RefPtr_h 222 #endif // WTF_RefPtr_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698