有什么方法可以找到从堆栈中实例化了多少对象以及Heap中有多少个对象

时间:2010-01-05 05:21:16

标签: c++

有什么方法可以找到从堆栈中实例化了多少对象以及Heap中有多少个对象。我不希望对Stack中的对象进行作用域限制。

如果我在构造函数和析构函数中使用静态计数器,它将在两种情况下被调用(来自堆栈和堆的对象)。一种方法是利用这个想法,堆栈中的对象是作用域的,当析构函数超出范围时调用析构函数,但我想要一个更好的解决方案,以便知道任何时间点的对象数量。

3 个答案:

答案 0 :(得分:10)

覆盖该类的operator new和operator delete。在那些运算符中有另一个计数器递增/递减。这将跟踪堆上创建的对象。构造函数/析构函数可以递增/递减另一个计数所有对象的计数器。两者之间的区别是堆栈上的对象集(以及全局对象)。

答案 1 :(得分:0)

Tarydon的解释适用于除内在类型之外的所有事物。对于内部类型,您可以覆盖全局new和delete,但我没有真正的方法来跟踪内部堆栈分配。

答案 2 :(得分:0)

我能想到的唯一解决方案是每次实例化或(明确地或不是)删除对象时都要保持计数。
如果使用 new 运算符创建对象,则将其记录为来自堆,否则,将其记录为常规变量。