Qt 智能指针
文章目录
QScopedPointer
QScopedPointer
是 Qt 提供的一个智能指针,主要用于简化资源管理,防止内存泄漏和悬挂指针问题。它属于 Qt 的内存管理工具,能够自动处理对象的生命周期,确保对象在超出作用域时被销毁。QScopedPointer
是基于 C++11 标准中的 std::unique_ptr
实现的,但它具有 Qt 的特点,通常用于局部对象的管理。
- 自动删除对象:当
QScopedPointer
超出作用域时,它会自动释放所持有的对象。这意味着无需手动delete
对象。 - 不能复制:
QScopedPointer
不支持复制操作,防止发生意外的多个指针指向同一个对象的问题。 - 所有权转移:可以使用
reset()
或通过构造函数将QScopedPointer
的所有权转移给另一个QScopedPointer
。
1. 自动删除对象
QScopedPointer
最常见的用法是在函数或局部作用域内管理动态分配的对象。在作用域结束时,QScopedPointer
自动销毁对象,无需显式调用 delete
。
#include <QScopedPointer>
#include <QDebug>
class MyClass {
public:
MyClass() {
qDebug() << "MyClass constructed"; }
~MyClass() {
qDebug() << "MyClass destructed"; }
};
void testScopedPointer() {
QScopedPointer<MyClass> ptr(new MyClass);
// 当函数返回时,ptr 超出作用域,对象会被自动销毁
} // 在这里,MyClass 对象会被自动删除
2. 转移所有权
QScopedPointer
不支持复制操作,但可以通过 reset()
或构造函数转移所有权。这样,QScopedPointer
可以在不同的作用域之间传递资源。
#include <QScopedPointer>
#include <QDebug>
class MyClass {
public:
MyClass() {
qDebug() << "MyClass constructed"; }
~MyClass() {
qDebug() << "MyClass destructed"; }
};
void transferOwnership() {
QScopedPointer<MyCl