以下是一个使用 QSharedPointer 导致多次释放的例子:

#include <QSharedPointer>
#include <QDebug>

class MyClass {
public:
    MyClass() {
        qDebug() << 'MyClass constructor';
    }

    ~MyClass() {
        qDebug() << 'MyClass destructor';
    }
};

int main() {
    QSharedPointer<MyClass> ptr;

    {
        MyClass obj;
        ptr = QSharedPointer<MyClass>(&obj);
    } // obj 在这里被销毁

    qDebug() << 'Finished';

    return 0;
}

在上面的例子中,我们创建了一个临时的 MyClass 对象,并将其地址传递给 QSharedPointer 的构造函数。然后,临时对象在离开作用域时被销毁,导致 QSharedPointer 持有的指针变为无效指针。当 QSharedPointer 的析构函数被调用时,它会尝试删除无效指针,导致多次释放的错误。

为了避免这种情况,我们应该确保 QSharedPointer 持有的指针是有效的,而不是临时对象。

Qt QSharedPointer 临时变量导致多次释放问题及解决方案

原文地址: https://www.cveoy.top/t/topic/oZnl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录