QT 如何使用智能指针,当引用为0时自动释放
时间: 2024-03-05 10:52:09 浏览: 53
在Qt中可以使用QSharedPointer类和QWeakPointer类实现智能指针的功能,其中QSharedPointer类用于管理对象的引用计数,QWeakPointer类用于检查对象是否已经被销毁。
示例代码如下:
```
class MyClass {
public:
MyClass() {
qDebug() << "MyClass is created.";
}
~MyClass() {
qDebug() << "MyClass is destroyed.";
}
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QSharedPointer<MyClass> ptr(new MyClass);
QWeakPointer<MyClass> weakPtr(ptr);
qDebug() << "ptr count:" << ptr->ref.count();
if (weakPtr.isNull()) {
qDebug() << "MyClass has been destroyed.";
}
ptr.clear();
if (weakPtr.isNull()) {
qDebug() << "MyClass has been destroyed.";
}
return a.exec();
}
```
这段代码创建了一个MyClass类的实例,并使用QSharedPointer类进行管理。在创建QSharedPointer对象时,会自动初始化引用计数为1。然后创建一个QWeakPointer对象,用于检查MyClass对象是否已经被销毁。接着,输出引用计数的值,检查MyClass对象是否已经被销毁。接下来,清除QSharedPointer对象的引用,再次检查MyClass对象是否已经被销毁。
需要注意的是,使用QWeakPointer类检查对象是否已经被销毁时,需要判断QWeakPointer对象是否为空,而不能直接判断指针是否为NULL。此外,QSharedPointer和QWeakPointer类的构造函数和析构函数都是线程安全的,可以在多线程环境中使用。
阅读全文