在 с++ 中正确删除 class

As correctly to remove class in с++

有时需要重新启动一个class,但删除它并不能保证它的静态变量会被重置。那一定要做到class离开了吗?

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

Src in github.com

在您的代码中 x 是一个静态变量,不是 class 的成员。所以它永远不会被重置。

在这种情况下,您想要的不是静态变量,而是 class:

的简单成员
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();
}