有时有必要再次重新启动类,但是删除它并不能保证将其静态变量重置。上课的那件事肯定已经离开了吗?
auto my = new MyClass;
for (int i = 0; i < 3; i++) {
delete my;
my = new MyClass;
my->runIs();
}
...
void MyClass::runIs()
{
static int x = 0;
qDebug() << ++x;
}
输出:
1
2
3
在您的代码中,x
是静态变量,不是该类的成员。因此它将永远不会被重置。
在这种情况下,您想要的不是静态变量,而是类的简单成员:
class MyClass {
public:
int x = 0;
void runIs();
}
void MyClass::runIs()
{
qDebug() << ++this->x;
}
MyClass* my;
for (int i = 0; i < 3; i++) {
my = new MyClass;
my->runIs();
delete my;
}
...
MyClass::MyClass(QObject* parent) : QObject(parent)
{
close_class = false;
}
void MyClass::runIs()
{
static int x = 0;
if (close_class) {
x = 0;
}
else {
qDebug() << ++x;
}
}
MyClass::~MyClass()
{
closeClass();
}
void MyClass::closeClass()
{
close_class = true;
runIs();
}