0

我正在尝试实现我自己的 Alloc 类,这将有助于动态分配对象。

我想跟踪程序中分配对象的数量。因此,每次分配对象的新实例时,计数器都会增加 1,并在对象被销毁时减少。当我的程序关闭时,如果计数器不为零,则对象会在屏幕上打印一条错误消息并让程序挂起,直到用户按 Enter 键。

这就是我到目前为止.. 我希望你们能帮助我实现这个..

class Alloc{
static int counter;
public:
Alloc(){ counter++; };
Alloc(int *d, static int size, const Alloc& c){

    d=(int *) malloc(size*sizeof(int));;
    //d=new int[size];
    Alloc *my_alloc;
    //my_alloc = new Alloc[size];                //note that the type is a Myclass pointer
    for(int i=0; i<size; i++){
        my_alloc[i] = new Alloc[size];
    }
    //for(int i=0; i < size; i++){
    //    d[i]=c.d[i];
    //}
}
~Alloc(){ counter--; }
};

我知道很多东西都丢失了,我也会感谢帮助和修复错误。谢谢!!!

4

2 回答 2

2
d=(int *) malloc(size*sizeof(int));;
d=new int[size];

这里的第二行是用第二次分配覆盖d指针,所以分配的内存malloc正在丢失!

如果你真的想这样做,你需要使用placement new,即类似的东西

d=(int *) malloc(size*sizeof(int));;
e=new (d) int[size];

虽然细节是相当棘手的。


不过,要计算程序中对象的数量,还有一个更简单的选择。实现一个模板化的“mixin”,其中包含每种类型的静态计数器。就像是

    template <typename T>
    struct countable
    {
        countable() { _count++; }
        countable(const countable&) { _count++; }
        ~countable() { _count--; }
        static int get_count() { return _count; }
    private:
        static int _count;
    };

然后让你的对象继承自此,如

    class MyClass : countable<MyClass>
    {
        // whatever
    };

它很简单,很容易变成发布版本的无操作。

于 2013-11-07T05:20:09.553 回答
2

类的实例数的轨迹说 Alloc 也可以保持为

class Alloc
{
    Public:
    static int Coounter; // object counter

//  Constructor

    Alloc(){
    Counter++;}

//  Destructor

    ~Alloc()
    {
    Counter--;
    }


};

简单、易于使用和可维护

于 2013-11-07T05:30:06.127 回答