2010-06-09 28 views
0

计算堆栈和堆中为不同类创建的对象总数的最佳方法是什么?我知道在C++中,new和delete操作符可能会被重载,因此在默认的构造函数和析构函数中,可以在对象创建或销毁时增加或减少对象计数。计数在堆栈和堆中为许多类创建的对象

此外,如果我要扩大同一事物的对象不同类的对象,然后我可以创建一个虚拟类,并在该类中编写对象计数代码,然后当我创建任何新的类,我可以派生它来自Dummy类。

对于同样的问题,还有其他的最佳解决方案吗?

+1

最好的办法是不要打扰 - 你为什么认为你需要这样做? – 2010-06-09 10:31:28

+0

基本上重复的http://stackoverflow.com/questions/1926605/ – 2010-06-09 10:51:05

+0

你想只计数堆栈和堆上的对象?不是全局变量,函数级静态,临时变量或异常? @Space_cowboy:不是,如果你需要根据他们的生命周期排除某些对象。 – MSalters 2010-06-09 11:47:04

回答

4

然后我可以创建一个虚拟类,并在该类中写入对象计数代码,然后当我创建任何新类时,我可以从虚拟类派生它。

是的,但因为每个类都需要它自己的计数,你必须做出一个基类模板,并利用奇异递归模板模式(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; 
}