使用智能指针QSharedPointer来管理对象指针的列表,避免手动加锁和解锁,这种实现的Qt示例代码?
时间: 2024-02-13 10:03:30 浏览: 130
下面是一个使用QSharedPointer来管理对象指针的列表的示例代码:
```cpp
#include <QCoreApplication>
#include <QSharedPointer>
#include <QThread>
#include <QDebug>
class Object : public QObject
{
Q_OBJECT
public:
Object(QObject *parent = nullptr) : QObject(parent) {}
~Object() { qDebug() << "Object destroyed"; }
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QSharedPointer<Object>> list;
for (int i = 0; i < 10; ++i) {
QSharedPointer<Object> obj(new Object);
list.append(obj);
}
qDebug() << "Before clear: " << list.count();
list.clear();
qDebug() << "After clear: " << list.count();
return a.exec();
}
```
在这个示例代码中,我们创建了一个QList<QSharedPointer<Object>>类型的列表,并使用QSharedPointer来管理Object对象的指针。在循环中,我们使用new操作符创建了Object对象,并将其封装在一个QSharedPointer中,然后将这个QSharedPointer添加到列表中。当我们调用list.clear()函数时,QSharedPointer会自动地管理Object对象的生命周期,将其删除,并释放内存。由于QSharedPointer内部使用了引用计数的方式来管理对象的引用数量,因此多个线程同时访问一个QSharedPointer对象不会导致竞争条件,从而避免了手动加锁和解锁的问题。
阅读全文