| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Weak pointers help in cases where you have many objects referring back to a | 5 // Weak pointers help in cases where you have many objects referring back to a |
| 6 // shared object and you wish for the lifetime of the shared object to not be | 6 // shared object and you wish for the lifetime of the shared object to not be |
| 7 // bound to the lifetime of the referrers. In other words, this is useful when | 7 // bound to the lifetime of the referrers. In other words, this is useful when |
| 8 // reference counting is not a good fit. | 8 // reference counting is not a good fit. |
| 9 // | 9 // |
| 10 // Thread-safety notes: | 10 // Thread-safety notes: |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 } | 164 } |
| 165 | 165 |
| 166 // Allow conversion from U to T provided U "is a" T. | 166 // Allow conversion from U to T provided U "is a" T. |
| 167 template <typename U> | 167 template <typename U> |
| 168 WeakPtr(const WeakPtr<U>& other) : WeakPtrBase(other), ptr_(other.get()) { | 168 WeakPtr(const WeakPtr<U>& other) : WeakPtrBase(other), ptr_(other.get()) { |
| 169 } | 169 } |
| 170 | 170 |
| 171 T* get() const { return ref_.is_valid() ? ptr_ : NULL; } | 171 T* get() const { return ref_.is_valid() ? ptr_ : NULL; } |
| 172 operator T*() const { return get(); } | 172 operator T*() const { return get(); } |
| 173 | 173 |
| 174 T* operator*() const { | 174 T& operator*() const { |
| 175 DCHECK(get() != NULL); | 175 DCHECK(get() != NULL); |
| 176 return get(); | 176 return *get(); |
| 177 } | 177 } |
| 178 T* operator->() const { | 178 T* operator->() const { |
| 179 DCHECK(get() != NULL); | 179 DCHECK(get() != NULL); |
| 180 return get(); | 180 return get(); |
| 181 } | 181 } |
| 182 | 182 |
| 183 void reset() { | 183 void reset() { |
| 184 ref_ = internal::WeakReference(); | 184 ref_ = internal::WeakReference(); |
| 185 ptr_ = NULL; | 185 ptr_ = NULL; |
| 186 } | 186 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 | 253 |
| 254 private: | 254 private: |
| 255 internal::WeakReferenceOwner weak_reference_owner_; | 255 internal::WeakReferenceOwner weak_reference_owner_; |
| 256 T* ptr_; | 256 T* ptr_; |
| 257 DISALLOW_IMPLICIT_CONSTRUCTORS(WeakPtrFactory); | 257 DISALLOW_IMPLICIT_CONSTRUCTORS(WeakPtrFactory); |
| 258 }; | 258 }; |
| 259 | 259 |
| 260 } // namespace base | 260 } // namespace base |
| 261 | 261 |
| 262 #endif // BASE_MEMORY_WEAK_PTR_H_ | 262 #endif // BASE_MEMORY_WEAK_PTR_H_ |
| OLD | NEW |