然后我可以创建一个虚拟类,并在该类中写入对象计数代码,然后当我创建任何新类时,我可以从虚拟类派生它。
是的,但因为每个类都需要它自己的计数,你必须做出一个基类模板,并利用奇异递归模板模式(CRTP):
template <class Derived>
class InstanceCounter
{
static int count;
protected:
InstanceCounter()
{
++count;
}
~InstanceCounter()
{
--count;
}
public:
static int instance_count()
{
return count;
}
};
template <class Derived>
int InstanceCounter<Derived>::count = 0;
class Test : public InstanceCounter<Test>
{
};
int main()
{
Test x;
std::cout << Test::instance_count() << std::endl;
{
Test y;
Test z;
std::cout << Test::instance_count() << std::endl;
}
std::cout << Test::instance_count() << std::endl;
}
最好的办法是不要打扰 - 你为什么认为你需要这样做? – 2010-06-09 10:31:28
基本上重复的http://stackoverflow.com/questions/1926605/ – 2010-06-09 10:51:05
你想只计数堆栈和堆上的对象?不是全局变量,函数级静态,临时变量或异常? @Space_cowboy:不是,如果你需要根据他们的生命周期排除某些对象。 – MSalters 2010-06-09 11:47:04