Sound Bakery  v0.1.0
Open-source audio middleware for games
Loading...
Searching...
No Matches
leak_detector.h
1#include "sound_bakery/pch.h"
2
3namespace sbk::util
4{
5 template <class owner_class>
7 {
8 public:
9 leaked_object_detector() noexcept { ++(get_counter().numObjects); }
10 leaked_object_detector(const leaked_object_detector&) noexcept { ++(get_counter().numObjects); }
11
12 leaked_object_detector& operator=(const leaked_object_detector&) noexcept = default;
13
15 {
16 if (--(get_counter().numObjects) < 0)
17 {
21 BOOST_ASSERT(false);
22 }
23 }
24
25 private:
26 class leak_counter
27 {
28 public:
29 leak_counter() = default;
30
31 ~leak_counter()
32 {
33 if (numObjects.load() > 0)
34 {
38 BOOST_ASSERT(false);
39 }
40 }
41
42 std::atomic<int> numObjects;
43 };
44
45 static const char* get_leaked_object_class_name() { return owner_class::get_type().get_name().c_str(); }
46
47 static leak_counter& get_counter() noexcept
48 {
49 static leak_counter counter;
50 return counter;
51 }
52 };
53
54} // namespace sbk::util
55#define LEAK_DETECTOR(owner_class) \
56private: \
57 friend class sbk::util::leaked_object_detector<owner_class>; \
58 sbk::util::leaked_object_detector<owner_class> leakDetector;
Definition leak_detector.h:7
~leaked_object_detector()
Definition leak_detector.h:14