共享型智能指针的实现share_pointer

智能指针是一个类,它产生的是一个类对象,而不是一个原生的指针对象,但是为了减少类对象与针对对象使用的差异性,所以share_ptr类故意重载了两种常见的指针操作符: *和->。从而share_ptr与普通指针使用方式一样。简言之,就是share_ptr生成的一个包含类型指针容器对象,它封装了指针对象,对指针对象负全责,包括生成、释放等。

智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指针指向同一对象

  • 下面代码为share_pointer的实现,包括:
    • 默认构造函数
    • 显式定义的自定义构造函数
    • 拷贝构造函数
    • 移动构造函数
    • 拷贝赋值函数
    • 移动赋值函数
    • *运算符
    • ->运算符
    • 三个版本的reset函数
  • 计数变量设为指针,主要是因为计数是共有的,这样一方面可以节省内存,另一方面可以达到管理共有变量的目的
  • destroy函数delete指针时不调用删除器
  • 删除器为一个可调用模板,在调用函数中可以用function定义其模式
#ifndef SHAREPOINTER_H
#define SHAREPOINTER_H

#include "DebugDelete.h"
#include <functional>
#include <iostream>
//1.模板成员函数知道使用时编译器才去编译
template<typename T>class share_pointer
{
public:

    //默认构造函数
    share_pointer(){} 


    //显式定义构造函数,传递指针管理类型和删除器对象两个形参
    explicit share_pointer(T *t, std::function<void(T*)> d = DebugDelete()):t(t),count(new size_t(1)),Deleter(d){}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值