45 template <
class OwnerClass>
55 if (--(getCounter().numObjects) < 0)
57 DBG (
"*** Dangling pointer deletion! Class: " << getLeakedObjectClassName());
79 LeakCounter() =
default;
83 if (numObjects.value > 0)
85 DBG (
"*** Leaked objects detected: " << numObjects.value <<
" instance(s) of class " << getLeakedObjectClassName());
101 static const char* getLeakedObjectClassName()
103 return OwnerClass::getLeakedObjectClassName();
106 static LeakCounter& getCounter() noexcept
108 static LeakCounter counter;
114 #if DOXYGEN || ! defined (JUCE_LEAK_DETECTOR) 115 #if (DOXYGEN || JUCE_CHECK_MEMORY_LEAKS) 135 #define JUCE_LEAK_DETECTOR(OwnerClass) \ 136 friend class juce::LeakedObjectDetector<OwnerClass>; \ 137 static const char* getLeakedObjectClassName() noexcept { return #OwnerClass; } \ 138 juce::LeakedObjectDetector<OwnerClass> JUCE_JOIN_MACRO (leakDetector, __LINE__); 140 #define JUCE_LEAK_DETECTOR(OwnerClass)
Embedding an instance of this class inside another class can be used as a low-overhead way of detecti...