QSharedPointer
特点:
- 用于管理动态分配的对象的所有权和生命周期。
- 当存在至少一个 QSharedPointer 指向对象时,对象的内存不会被释放。
- 当最后一个指向对象的 QSharedPointer 超出作用域时,对象的内存会被释放。
- 可通过复制 QSharedPointer 来增加对象的引用计数,确保对象在合适的时候被释放。
1 #pragma once 2 #include <QSharedPointer> 3 #include <QDebug> 4 class MyClass 5 { 6 private: 7 int m_value; 8 public: 9 MyClass(int value) : m_value(value) 10 { 11 qDebug() << "MyClass 构造函数,数值为" << m_value; 12 } 13 14 ~MyClass() 15 { 16 qDebug() << "MyClass 析构函数,数值为" << m_value; 17 } 18 19 void setValue(int value) 20 { 21 m_value = value; 22 } 23 24 int getValue() const 25 { 26 return m_value; 27 } 28 29 30 };
使用
1 // 创建一个 QSharedPointer 智能指针,用于管理 MyClass 对象 2 QSharedPointer<MyClass> pointer1(new MyClass(10)); 3 4 { 5 // 复制构造函数,增加了 MyClass 对象的引用计数 6 QSharedPointer<MyClass> pointer2 = pointer1; 7 qDebug(); 8 qDebug() << codec->toUnicode("pointer1 的值为:") << pointer1->getValue(); 9 qDebug() << codec->toUnicode("pointer2 的值为:") << pointer2->getValue(); 10 11 pointer2->setValue(20); 12 qDebug() << codec->toUnicode("pointer1 的值为:") << pointer1->getValue(); 13 qDebug() << codec->toUnicode("pointer2 的值为:") << pointer2->getValue(); 14 } // pointer2 超出作用域,减少了 MyClass 对象的引用计数 15 qDebug() << codec->toUnicode("pointer1 的值为:") << pointer1->getValue();
结果输出:
MyClass 构造函数,数值为 10 pointer1 的值为 10 pointer2 的值为 10 pointer1 的值为 20 pointer2 的值为 20 pointer1 的值为 20 MyClass 析构函数,数值为 20

浙公网安备 33010602011771号