Вы можете использовать детектор утечки памяти или сборщик мусора.Лично я использую Boehm GC в качестве сборщика мусора, но его можно использовать как детектор утечки.Мой друг использует valgrind для обнаружения утечек памяти.
Также возможно извлечь все ваши классы из пользовательского объекта, который отслеживает ВСЕ выделенные объекты в статической структуре std :: set;конструктор вставляет «this» в эту структуру, деструктор удаляет ее.Затем вы можете использовать статический Object :: detectMemoryLeaks () в конце вашей программы, чтобы распечатать все протекающие объекты и их typeid (ptr) .name ().
Редактировать:
Iвнедрил мою версию за последние несколько часов в мою библиотеку.Не нашел еще способа исключить статические переменные или автоматически определить размер полиморфного объекта.Также прошу прощения за java-подобный инопланетный код и наличие сборки мусора: header и реализаций .Найдите конструктор, деструктор, статический атрибут aliveObjects и статический метод listAliveObjects.Вы можете легко понять суть концепции.
Пример выходных данных:
Frigo::Lang::Array<char> : 6 objects
Frigo::Lang::String : 6 objects
Frigo::Lang::Boolean : 2 objects
Frigo::Lang::Integer : 2 objects
Frigo::Math::Infinity : 1 objects
Frigo::Lang::Class : 1 objects
----
Frigo::Lang::Array<char> : 7 objects @ 0x1d33e18, 0x1d33e78, 0x1d33ed8, 0x1d33f38, 0x1d33f68, 0x1d33f98, 0x1d33fc8
Frigo::Lang::String : 7 objects @ 0x1d33e10, 0x1d33e70, 0x1d33ed0, 0x1d33f30, 0x1d33f60, 0x1d33f90, 0x1d33fc0
Frigo::Lang::Boolean : 2 objects @ 0x1d30fa8, 0x1d30fd8
Frigo::Lang::Integer : 2 objects @ 0x1d30e88, 0x1d30eb8
Frigo::Lang::Class : 1 objects @ 0x1d30f60
Frigo::Math::Infinity : 1 objects @ 0x41a110
----
Frigo::Lang::Array<char> : 6 objects
Frigo::Lang::Array<char>@3b3e78
Frigo::Lang::Array<char>@3b3ed8
Frigo::Lang::Array<char>@3b3f38
Frigo::Lang::Array<char>@3b3f68
Frigo::Lang::Array<char>@3b3f98
Frigo::Lang::Array<char>@3b3fc8
Frigo::Lang::String : 6 objects
Frigo::Lang::Boolean
Frigo::Lang::Class
Frigo::Lang::Integer
Hello World!
true
false
Frigo::Lang::Boolean : 2 objects
true
false
Frigo::Lang::Integer : 2 objects
987
123
Frigo::Math::Infinity : 1 objects
Frigo::Math::Infinity@41a110
Frigo::Lang::Class : 1 objects
Frigo::Lang::Class@3b0f60
----
Frigo::Lang::Array<char> : 7 objects
@ 0x1cd3e18 : Frigo::Lang::Array<char>@1cd3e18
@ 0x1cd3e78 : Frigo::Lang::Array<char>@1cd3e78
@ 0x1cd3ed8 : Frigo::Lang::Array<char>@1cd3ed8
@ 0x1cd3f38 : Frigo::Lang::Array<char>@1cd3f38
@ 0x1cd3f68 : Frigo::Lang::Array<char>@1cd3f68
@ 0x1cd3f98 : Frigo::Lang::Array<char>@1cd3f98
@ 0x1cd3fc8 : Frigo::Lang::Array<char>@1cd3fc8
Frigo::Lang::String : 7 objects
@ 0x1cd3e10 : Frigo::Lang::Boolean
@ 0x1cd3e70 : Frigo::Lang::Class
@ 0x1cd3ed0 : Frigo::Lang::Integer
@ 0x1cd3f30 : Frigo::Math::Infinity
@ 0x1cd3f60 : Hello World!
@ 0x1cd3f90 : true
@ 0x1cd3fc0 : false
Frigo::Lang::Boolean : 2 objects
@ 0x1cd0fa8 : true
@ 0x1cd0fd8 : false
Frigo::Lang::Integer : 2 objects
@ 0x1cd0e88 : 987
@ 0x1cd0eb8 : 123
Frigo::Lang::Class : 1 objects
@ 0x1cd0f60 : Frigo::Lang::Class@1cd0f60
Frigo::Math::Infinity : 1 objects
@ 0x41b110 : Frigo::Math::Infinity@41b110