C++11智能指针shared_ptr的实现思路(内附实现和测试代码)

本文介绍了如何实现C++11的shared_ptr,通过封装指针并实现引用计数,确保避免内存泄漏。内容包括构造函数、拷贝构造函数、拷贝赋值操作符、解引用和指向运算符的重载,以及useCount函数。通过测试样例验证了shared_ptr的基本功能。
摘要由CSDN通过智能技术生成

由于面试的时候被问到过几次智能指针,所以闲下来打算从头理一遍智能指针的实现思路,自己实现一个shared_ptr,也能够更好地理解智能指针。

智能指针说白了就是用类把指针封装起来,这样就不必担心内存泄漏的问题了,因为类的对象在出作用域的时候会自动调用析构函数。

因此智能指针要具备指针的基本功能:

  1. 首先要有一个T类型的指针,用于封装实际的指针(初始化);
  2. 其次一定要有一个int型指针,用于引用计数,同步更新指向同一内存空间的智能指针有多少个;
  3. 要自己写构造函数、拷贝构造函数、拷贝赋值函数及析构函数;
  4. 重载 解引用运算符 * 和 指向运算符 -> ;
  5. 最后useCount函数用于获取该对象所封装指针的引用计数。

另外还编写了几个测试样例,用于验证是否实现了shared_ptr的基本功能,具体代码如下:

#include <iostream>
using namespace std;

template<typename T>
class SharedPtr {
   
  private:
    T* m_ele;
    int* m_num;

  public:
    SharedPtr(): m_ele(nullptr){
   
        cout << "Hello Constructor 1 !" << endl;
        m_num = new int(0);
    }

    SharedPtr(T* x): m_ele(x){
   
        cout << "Hello Constructor 2 !" << endl;
        m_num = new int(1);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值