数据结构之智能指针类

配套环境

vscode + g++

设计要求

(1).指针生命周期结束时主动释放堆空间

(2).一片堆空间最多只能由一个指针标识

(3).杜绝指针运算和指针比较

设计方案

(1).通过类模板描述指针的行为

        能够定义不同类型的指针对象

(2).重载指针特征操作符(->和*)

        利用对象模拟原生指针的行为

实现代码

#ifndef SMARTPOINTER_H
#define SMARTPOINTER_H

#include <iostream>
namespace DTLib {
template <typename T> class SmartPointer {
protected:
  T *m_pointer;

public:
  SmartPointer(T *p = NULL) { m_pointer = p; } // 默认构造函数

  SmartPointer(const SmartPointer<T> &obj) { // 拷贝构造函数
    m_pointer = obj.m_pointer;
    const_cast<SmartPointer<T> &>(obj).m_pointer = NULL;
  }

  SmartPointer<T> &operator=(const SmartPointer<T> &obj) { // 赋值运算符重载
    if (this != &obj) {
      delete m_pointer;
      m_pointer = obj.m_pointer;
      const_cast<SmartPointer<T> &>(obj).m_pointer = NULL;
    }
    return *this;
  }

  T *operator->() { return m_pointer; } // ->操作符重载

  T &operator*() { return *m_pointer; } // *操作符重载

  bool isNull() { return (m_pointer == NULL); } // 判断当前指针是否为空

  T *get() { return m_pointer; } // 获取当前指针

  ~SmartPointer() { delete m_pointer; } // 析构函数
};
} // namespace DTLib

#endif

使用要求

智能指针只能用来指向堆空间中的单个对象或者变量

小结

指针特征操作符(->和*)可以被重载

重载指针特征符能够使用对象代替指针

智能指针只能用于指向堆空间中的内存

智能指针的意义在于最大程度的避免内存问题

喝水不忘挖井人: 更多内容请搜索狄泰软件学院(淘宝/B站)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Joyce_JTR

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

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

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

打赏作者

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

抵扣说明:

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

余额充值