blob: a452fd3bc67e4a1d098d66b1016a093c2159f3d1 (
plain)
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
// $Id$
#define ACE_BUILD_DLL
#include "ace/Object_Manager.h"
#include "ace/Service_Repository.h"
ACE_Object_Manager *ACE_Object_Manager::instance_ = 0;
ACE_Object_Manager::ACE_Object_Manager ()
: registered_objects_ (),
registered_arrays_ ()
{
}
ACE_Object_Manager::~ACE_Object_Manager ()
{
void *p;
int i;
// Delete all registered objects and arrays.
while ((i = registered_objects_.dequeue_head (p)) != -1)
{
delete p;
}
while ((i = registered_arrays_.dequeue_head (p)) != -1)
{
delete [] p;
}
// This call closes and deletes all ACE library services and singletons.
ACE_Service_Config::close ();
}
ACE_Object_Manager *
ACE_Object_Manager::instance ()
{
// This function should be call during construction of static instances,
// so it's not thread safe.
if (instance_ == 0)
{
ACE_NEW_RETURN (instance_, ACE_Object_Manager (), 0);
}
return instance_;
}
void
ACE_Object_Manager::delete_at_exit (void *object)
{
registered_objects_.enqueue_tail (object);
}
void
ACE_Object_Manager::delete_array_at_exit (void *array)
{
registered_arrays_.enqueue_tail (array);
}
#if defined (ACE_TEMPLATES_REQUIRE_SPECIALIZATION)
template class ACE_Unbounded_Queue<void *>;
template class ACE_Unbounded_Queue_Iterator<void *>;
template class ACE_Node<void *>;
#endif /* ACE_TEMPLATES_REQUIRE_SPECIALIZATION */
|