Qt QSharedPointer 临时变量导致多次释放问题及解决方案
以下是一个使用 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 持有的指针是有效的,而不是临时对象。
原文地址: https://www.cveoy.top/t/topic/oZnl 著作权归作者所有。请勿转载和采集!