C++:如何在运行时计算所有实例化对象?

nin*_*ina 8 c++ debugging trace runtime

我有一个由许多C++类组成的大型框架.有没有办法在运行时使用任何工具来跟踪正在构建和当前存在的所有C++对象?

例如,在特定时间t1,应用程序可能具有对象A1,A2和B3,但是在时间t2,它具有A1,A4,C2等等?

这是一个跨平台框架,但我熟悉在Linux,Solaris和(可能)Mac OS X中工作.

And*_*nck 10

您可以在要计算的对象的析构函数和构造函数中注入代码:

SomeObject::SomeObject() {
   ++globalSomeObjectCounter;
}

SomeObject::~SomeObject() {
   --globalSomeObjectCounter;
}
Run Code Online (Sandbox Code Playgroud)

不要忘记在所有构造函数(复制构造函数等)中增加计数器

编辑:在这种情况下,人们可以使用奇怪的重复模板模式:

template <typename T>
struct Counter
{
    Counter() {++counter;}
    virtual ~Counter() {--counter;}
    static int counter;
};
template <typename T> int Counter<T>::counter(0);
Run Code Online (Sandbox Code Playgroud)

然后:

class SomeObject : public Counter<SomeObject> {
}
Run Code Online (Sandbox Code Playgroud)

自动为每个类类型生成一个计数器.