You.i Engine
YiWeakPtr.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_WEAK_PTR_H_
3 #define _YI_WEAK_PTR_H_
4 
5 #include "smartptr/YiSharedPtr.h"
6 #include "utility/YiUtilities.h"
7 
8 #include <memory>
9 
58 template<typename YI_PTR_TYPE>
59 class CYIWeakPtr
60 {
61  template<typename YI_OTHER_PTR_TYPE> friend class CYISharedPtr;
62  template<typename YI_OTHER_PTR_TYPE> friend class CYIWeakPtr;
63 
64 public:
68  CYIWeakPtr();
69 
74  CYIWeakPtr(const CYIWeakPtr<YI_PTR_TYPE> &rOther);
75 
80  template<typename YI_OTHER_PTR_TYPE>
82 
88 
93  CYIWeakPtr(const std::shared_ptr<YI_PTR_TYPE> &rOther);
94 
99  template<typename YI_OTHER_PTR_TYPE>
100  CYIWeakPtr(const std::weak_ptr<YI_OTHER_PTR_TYPE> &rOther);
101 
106  template<typename YI_OTHER_PTR_TYPE>
108 
113  ~CYIWeakPtr();
114 
119  void Reset();
120 
155  YI_PTR_TYPE *Get() const;
156 
180  bool IsNull() const;
181 
185  uint32_t GetUseCount() const;
186 
210  void Swap(CYIWeakPtr<YI_PTR_TYPE> &rPtr);
211 
230 
254  bool operator!() const;
255 
279  operator bool() const;
280 
285  template<typename YI_OTHER_PTR_TYPE>
286  operator std::weak_ptr<YI_OTHER_PTR_TYPE>() const;
287 
294 
300  template<typename YI_OTHER_PTR_TYPE>
302 
309 
315  template<typename YI_OTHER_PTR_TYPE>
317 
323  template<typename YI_OTHER_PTR_TYPE>
324  CYIWeakPtr<YI_PTR_TYPE> &operator=(const std::shared_ptr<YI_OTHER_PTR_TYPE> &rOther);
325 
326 private:
327  std::weak_ptr<YI_PTR_TYPE> m_pWeak;
328 };
329 
332 #include "smartptr/YiWeakPtr.inl"
333 
334 #endif /* _YI_WEAK_PTR_H_ */
bool IsNull() const
uint32_t GetUseCount() const
The CYIWeakPtr is a smart pointer that does not take any ownership of a dynamically allocated object...
Definition: YiSharedPtr.h:20
CYIWeakPtr< YI_PTR_TYPE > & operator=(const CYIWeakPtr< YI_PTR_TYPE > &rOther)
bool operator!() const
The CYISharedPtr is a smart pointer that takes a shared ownership of a dynamically allocated object...
Definition: YiSharedPtr.h:118
YI_PTR_TYPE * Get() const
CYISharedPtr< YI_PTR_TYPE > ToStrongPtr() const
void Swap(CYIWeakPtr< YI_PTR_TYPE > &rPtr)
void Reset()