正确地删除с++中的类

问题描述 投票:0回答:2

有时有必要再次重新启动类,但是删除它并不能保证将其静态变量重置。上课的那件事肯定已经离开了吗?

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

c++ new-operator delete-operator
2个回答
3
投票

在您的代码中,x是静态变量,不是该类的成员。因此它将永远不会被重置。

在这种情况下,您想要的不是静态变量,而是类的简单成员:

class MyClass {
public:
    int x = 0;

    void runIs();
}

void MyClass::runIs()
{
    qDebug() << ++this->x;
}

0
投票
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();
}
© www.soinside.com 2019 - 2024. All rights reserved.