Qt 智能指针QScopedPoint用法

1. 智能指针是什么

智能指针是C++11引入的一种指针封装类型,用于自动管理动态分配的内存。智能指针的目的是解决传统裸指针带来的内存泄漏、悬挂指针等问题,并使代码更安全、更易读。

2. 智能指针有什么用

1.自动管理内存,避免内存泄漏和悬挂指针问题;
2.简化代码,减少异常处理和资源管理的复杂性;
3.提高代码可读性和可维护性;
4.帮助实现RAII(资源获取即初始化)原则,更好地管理资源。

3. 智能指针和普通指针区别

智能指针和普通指针的主要区别在于内存管理方式。普通指针(裸指针)直接使用内存地址,需要手动申请和释放内存,容易导致内存泄漏和悬挂指针等问题。而智能指针封装了内存地址,通过自动管理内存的方式避免了这些问题。
智能指针内部维护了一个引用计数器,当一个智能指针被创建或拷贝时,计数器加1;当一个智能指针被销毁或重置时,计数器减1。当计数器减至0时,智能指针会自动释放其所指向的内存。这种方式称为“所有权”(ownership)模型,智能指针具有其内存的所有权,避免了普通指针中的多个指针指向同一内存地址的情况。
另外,智能指针还提供了一些有用的成员函数,如reset()release()等,可以更方便地进行内存管理。同时,智能指针的类型也不同,如std::unique_ptr表示独占所有权的智能指针,std::shared_ptr表示共享所有权的智能指针,std::weak_ptr表示观察智能指针等。

4. QScopedPoint介绍

QScopedPointer类用于存储一个指向动态分配的对象的指针,并在对象销毁时自动删除它。
手动管理堆分配的对象是困难且容易出错的。常见的后果是代码内存泄漏,难以维护。QScopedPointer是一个小工具类,通过将基于堆栈的内存所有权分配给堆分配,一般称资源获取即初始化(RAII),从而大大简化了这一点。
QScopedPointer保证当当前作用域消失时,所指向的对象将被删除。
当使用QScopedPointer时,可以确保在函数退出时,所分配的对象会被自动删除,从而避免了内存泄漏。这使得代码更简洁、更安全,减少了内存泄漏和代码错误的风险。
比如:一般我们自行new在堆中创建对象时,需手动管理内存,如下:

  void myFunction(bool useSubClass)
  {
   
   
      MyClass *p = useSubClass ? new MyClass() : new MySubClass;
      QIODevice *device = handsOverOwnership();

      if (m_value > 3) {
   
   
          delete p;
          delete device;
          return;
      }

      try {
   
   
          process(device<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FreeLikeTheWind.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值