-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAutoReleasePool.cpp
57 lines (47 loc) · 899 Bytes
/
AutoReleasePool.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <cstdio>
#include <cassert>
#include "AutoReleasePool.h"
namespace lx {
//! AutoReleasePool
AutoReleasePool::AutoReleasePool ()
{
get_poolStack().emplace(this);
}
AutoReleasePool::~AutoReleasePool ()
{
while (!_objs.empty())
{
delete *_objs.begin();
}
get_poolStack().pop();
}
AutoReleasePool&
AutoReleasePool::instance (void)
{
assert(!get_poolStack().empty());
return *get_poolStack().top();
}
void
AutoReleasePool::insert (AutoReleaseObj* obj)
{
if (_objs.find(obj) == _objs.end()) {
_objs.insert(obj);
}
}
void
AutoReleasePool::remove (AutoReleaseObj* obj)
{
if (_objs.find(obj) != _objs.end()) {
_objs.erase(obj);
}
}
//! AutoReleaseObj
AutoReleaseObj::AutoReleaseObj ()
{
AutoReleasePool::instance().insert(this);
}
AutoReleaseObj::~AutoReleaseObj ()
{
AutoReleasePool::instance().remove(this);
}
}