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

 

posted @ 2025-12-03 10:03  家煜宝宝  阅读(5)  评论(0)    收藏  举报