qsharedpointer用法和普通指针有什么区别,请用代码对比说明
时间: 2023-12-08 19:03:56 浏览: 81
QSharedPointer是一个智能指针,与普通指针相比,主要区别有以下几点:
1. 引用计数:QSharedPointer使用引用计数来管理对象的生命周期,可以自动地增加和减少对象的引用计数,从而确保对象在不再需要时自动释放。
2. 所有权:QSharedPointer可以共享指针所指向的对象,多个QSharedPointer可以指向同一个对象,而不会出现二次释放等问题。
下面是使用普通指针和QSharedPointer的示例代码:
```
class MyClass {
public:
MyClass() {
qDebug() << "MyClass is created.";
}
~MyClass() {
qDebug() << "MyClass is destroyed.";
}
void someMethod() {
qDebug() << "someMethod is called.";
}
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
// 使用普通指针
MyClass *ptr1 = new MyClass;
MyClass *ptr2 = ptr1;
delete ptr1; // 释放对象
ptr1 = nullptr;
delete ptr2; // 二次释放,导致程序崩溃
// 使用QSharedPointer
QSharedPointer<MyClass> ptr3(new MyClass);
QSharedPointer<MyClass> ptr4 = ptr3;
ptr3->someMethod();
ptr4->someMethod();
return a.exec();
}
```
这段代码中,首先使用普通指针创建了一个MyClass类的实例,并将指针传递给另一个指针,然后第一个指针释放对象,第二个指针再次释放对象,导致程序崩溃。
接着,使用QSharedPointer创建了一个MyClass类的实例,并将指针传递给另一个指针,然后调用共享指针的someMethod()方法。由于QSharedPointer使用引用计数来管理对象的生命周期,因此不会出现二次释放等问题。
阅读全文