🛰️航天仿真算法库 SpaceAST
0.0.1
载入中...
搜索中...
未找到
SharedPtr.hpp
浏览该文件的文档.
1
20
21
#pragma once
22
23
#include "AstGlobal.h"
24
25
AST_NAMESPACE_BEGIN
26
31
template
<
typename
_Object>
32
class
SharedPtr
33
{
34
public
:
35
SharedPtr
()
36
:object_{
nullptr
}
37
{}
38
SharedPtr
(std::nullptr_t)
39
:object_{
nullptr
}
40
{
41
}
42
SharedPtr
(_Object* obj)
43
:object_{ obj }
44
{
45
_incRef();
46
}
47
SharedPtr
(
const
SharedPtr
& ptr)
48
:
SharedPtr
{ptr.get()}
49
{
50
51
}
52
~SharedPtr
()
53
{
54
_decRef();
55
}
56
SharedPtr
& operator=(
const
SharedPtr
& ptr)
57
{
58
return
this->operator=(ptr.get());
59
}
60
61
SharedPtr
& operator=(_Object* obj)
62
{
63
if
(obj != object_){
64
if
(obj)
65
obj->incRef();
66
_decRef();
67
object_ = obj;
68
}
69
return
*
this
;
70
}
71
SharedPtr
& operator=(std::nullptr_t)
72
{
73
reset();
74
return
*
this
;
75
}
76
// 这里还是设置为支持隐式转换,因为在很多情况下,我们需要将SharedPtr转换为_Object*
77
// explicit
78
operator
_Object*()
const
79
{
80
return
object_;
81
}
82
explicit
operator
bool()
const
83
{
84
return
object_ !=
nullptr
;
85
}
86
_Object* operator->()
const
87
{
88
return
object_;
89
}
90
_Object* get()
const
91
{
92
return
object_;
93
}
94
_Object* take()
95
{
96
_Object* obj = object_;
97
if
(obj){
98
obj->decRefNoDelete();
99
object_ =
nullptr
;
100
}
101
return
obj;
102
}
103
void
reset()
104
{
105
_decRef();
106
object_ =
nullptr
;
107
}
108
protected
:
109
void
_incRef()
110
{
111
if
(object_)
112
object_->incRef();
113
}
114
void
_decRef()
115
{
116
if
(object_)
117
object_->decRef();
118
}
119
protected
:
120
_Object* object_{
nullptr
};
121
};
122
123
124
125
AST_NAMESPACE_END
126
ast::SharedPtr
共享指针
定义
SharedPtr.hpp:33
src
AstUtil
RTTI
SharedPtr.hpp
制作者
1.12.0