OpenBarnyard
 
Loading...
Searching...
No Matches
T2ManagedPtr.h
Go to the documentation of this file.
1#pragma once
2
4
5//-----------------------------------------------------------------------------
6// Purpose: this type of pointer is the only managed pointer that has rights
7// to destroy the created object.
8// Note: previously known as TManagedPtr.
9//-----------------------------------------------------------------------------
10template <typename T>
12{
13public:
14 // Constructor
16 : m_pRawPtr( TNULL )
17 {}
18
19 // Copy constructor
20 T2ManagedPtr( const T2ManagedPtr& a_rOther ) = delete;
21
22 // Move constructor
24 {
25 m_pRawPtr = a_rOther.m_pRawPtr;
26 a_rOther.m_pRawPtr = TNULL;
27 }
28
29 // Destructor
31 {
32 if ( m_pRawPtr )
33 delete m_pRawPtr;
34 }
35
36 // Returns TTRUE if not TNULL
37 TBOOL IsValid() const
38 {
39 return m_pRawPtr;
40 }
41
42 // Returns TTRUE if destroyed the object
44 {
45 if ( m_pRawPtr )
46 {
47 delete m_pRawPtr;
48 m_pRawPtr = TNULL;
49
50 return TTRUE;
51 }
52
53 return TFALSE;
54 }
55
56 T* Get() { return TREINTERPRETCAST( T*, m_pRawPtr ); }
57 const T* Get() const { return TREINTERPRETCAST( const T*, m_pRawPtr ); }
58
59 T* operator->() { return Get(); }
60 const T* operator->() const { return Get(); }
61
62 T2ManagedPtr& operator=( const T2ManagedPtr& a_rOther ) = delete;
63
64 // Use this to create managed pointer objects
65 template <class... Args>
66 static T2ManagedPtr New( Args&&... args )
67 {
68 // Allocate memory
69 T* pObject = new T( std::forward<Args>( args )... );
70
71 return T2ManagedPtr{ .m_pRawPtr = pObject };
72 }
73
74private:
75 T* m_pRawPtr;
76};
77
#define TREINTERPRETCAST(TYPE, VALUE)
Definition Defines.h:68
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
#define TNULL
Definition Typedefs.h:23
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
bool TBOOL
Definition Typedefs.h:6
const T * operator->() const
T2ManagedPtr(const T2ManagedPtr &a_rOther)=delete
TBOOL IsValid() const
T2ManagedPtr(T2ManagedPtr &&a_rOther)
TBOOL Destroy()
T2ManagedPtr & operator=(const T2ManagedPtr &a_rOther)=delete
static T2ManagedPtr New(Args &&... args)
const T * Get() const