计算不同类在堆栈和堆中创建的对象总数的最佳方法是什么。我知道在C ++中,new和delete运算符可以重载,因此,在默认的构造函数和析构函数中,对象数可以随着对象的创建或销毁而增加或减少。
此外,如果我要扩展同一事物来对不同类的对象进行对象计数,那么我可以创建一个哑类并在该类中编写对象计数代码,然后在我创建任何新类时可以从Dummy类派生它。
对于同一问题,是否还有其他最佳解决方案。
然后我可以创建一个虚拟类并在该类中编写对象计数代码,然后在我创建任何新类时可以从Dummy类派生它。
是的,但是由于每个类都需要自己的计数,因此您必须制作一个基类模板并使用奇怪的重复模板模式(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;
}
Run Code Online (Sandbox Code Playgroud)