我写了这样的课:
class memUsage {
public:
memUsage();
void addByte(int amount);
int used_byte(){return total_byte;}
static memUsage* Instance(){return new memUsage();}
private:
int total_byte;
};
memUsage::memusage()
{
total_byte = 0;
}
memUsage::addByte(int amount)
{
total_byte +=amount;
}
然后我用以下方式调用它:
memUsage::Instance()->addByte(512);
memUsage::Instance()->addByte(512);
该函数总是返回0:
int test = memUsage::Instance()->used_byte();
我从一个我不记得的地方复制了实例设计,所以我不知道这是否是正确的方法,或者我需要更改什么?
最佳答案
每次调用Instance
函数都会创建一个新实例,因此
memUsage::Instance()->addByte(512);
memUsage::Instance()->addByte(512);
在两个不同的对象实例上调用
addByte
。而且,由于
Instance
在每次调用时也会创建一个新对象,但是您永远不会释放该对象,因此也会发生内存泄漏。单例“获取实例”功能通常看起来像
static memUsage* Instance()
{
static memUsage instance;
return &instance;
}