iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >如何进行C++智能指针的实现
  • 275
分享到

如何进行C++智能指针的实现

2023-06-06 04:06:16 275人浏览 泡泡鱼
摘要

本篇文章为大家展示了如何进行c++智能指针的实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。自己根据Http://blog.csdn.net/lf_2016/article/details/524

本篇文章为大家展示了如何进行c++智能指针的实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

自己根据Http://blog.csdn.net/lf_2016/article/details/52430895这人的博客做了修改,并对代码做详细的注解
,具体如下:


#include

//删除器类定义,当然也可以定义其他删除器
struct DefaultDel{
    //重载()函数运算符,像调用函数一样调用该类的实例
    void operator()(void *ptr){
        if(ptr==nullptr){
            std::cout<<"fuck ,you shou give a valid ptr!"<<std::endl;



        }else{
            delete ptr;
        }
        std::cout<<"ptr have been delted!"<<std::endl;

    }

};
//D这里表示删除器,D是一个类,重载了函数调用操作符,即可以像函数一样使用这个类
template  class SharedPtr {
public:
    //这里设置了默认删除器为del函数
    SharedPtr(T* ptr,D del = DefaultDel());


    //为什么需要复制构造函数和赋值构造函数是因为一个对象可以被多个智能指针指向,而指向只能通过赋值和拷贝做到
    //拷贝构造函数
    SharedPtr(const SharedPtr &sp);
    //赋值运算符重载
    SharedPtr& operator=(const SharedPtr &sp);
    //析构函数
    ~SharedPtr();

    //为什么要重载*和->,是因为智能指针要实现与普通指针一样的操作
    T& operator*();
    T* operator->();
    T* _ptr;

private:
    void release(){
        if(--(*_pCount)==0){
            _del(_ptr);
            delete _pCount;
            _ptr=nullptr;
            _pCount=nullptr;



        }


    }

    int* _pCount;
    D _del;
    //static int _pCount;

};

//构造函数初始化
//ShardPtr sp(new int(12),DefaultDel());
template
SharedPtr::SharedPtr(T* ptr,D del)
:_ptr(ptr),_pCount(new int(1)),_del(del){}


//析构函数,调用release释放资源
template
SharedPtr::~SharedPtr(){

    release();

}



template
SharedPtr::SharedPtr(const SharedPtr &ps){
        _ptr = ps._ptr;

        _pCount=ps._pCount;
        (*_pCount)++;
        //这里为什么不用下面这种方式是智能指针的计数器是共享的,当然把_pCount设置为int静态类型更好
        //_pCount=ps->_pCount+1;
        //这里为什么不用下面这种方式是因为构造函数已经指定了删除器,当然,复制一个也是可以,但是没必要
        //_del=ps._del;
}
template
SharedPtr& SharedPtr::operator=(const SharedPtr &ps){
    if(this != &ps){
        _pCount=ps._pCount;
        (*_pCount)++;
        _ptr = ps._ptr;

    }
    return *this;

}
template
T& SharedPtr::operator*(){

    return *_ptr;


}
template
T* SharedPtr::operator->(){

    return _ptr;

}



void test(){

    SharedPtr sp(new int(1));
    //这里传了一个简单的删除器,DefaultDel实例
    SharedPtr sp1((int *)malloc(sizeof(int)),DefaultDel());

    SharedPtr sa(new int(2));
    sa=sp;
    //这个应该输出为1
    std::cout<<(*sa)<<std::endl;


}
int main()
{
    test();

    std::cout << "Hello world!" << std::endl;
    system("pause");
    return 0;
}


具体效果如下:

</std::endl;
</std::endl;
</std::endl;

上述内容就是如何进行C++智能指针的实现,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网其他教程频道。

--结束END--

本文标题: 如何进行C++智能指针的实现

本文链接: https://www.lsjlt.com/news/246053.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行C++智能指针的实现
    本篇文章为大家展示了如何进行C++智能指针的实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。自己根据http://blog.csdn.net/lf_2016/article/details/524...
    99+
    2023-06-06
  • 怎么进行c++智能指针unique_ptr的使用
    怎么进行c++智能指针unique_ptr的使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.为什么需要unique_ptr与shared_ptr作用类似,需要解决内存...
    99+
    2023-06-22
  • C++中如何使用智能指针
    这期内容当中小编将会给大家带来有关C++中如何使用智能指针,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。内存泄露是C++程序员都头疼的大问题。C++缺乏像JAVA、C#一样,拥有GC这么一项有利的武器,它...
    99+
    2023-06-17
  • C++智能指针shared_ptr与weak_ptr的实现分析
    目录shared_ptrweak_ptr内存模型RefCnt 和 Mdel实现shared_ptr 实现weak_ptr 实现shared_from_this()循环引用shared...
    99+
    2024-04-02
  • C++智能指针之shared_ptr如何使用
    这篇文章主要介绍“C++智能指针之shared_ptr如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++智能指针之shared_ptr如何使用”文章能帮助大家解决问题。std::share...
    99+
    2023-06-30
  • C++ 智能指针:指针的进化,解决内存问题的良药
    智能指针是 c++++ 中的工具,通过自动管理内存释放来解决内存管理问题。常用的智能指针类型有:unique_ptr:独占所有权,销毁时释放指向的对象。shared_ptr:共享所有权,...
    99+
    2024-05-09
    c++ 智能指针 作用域
  • C++中Boost的智能指针weak_ptr
    循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象。一个简单的例子如下: #include <string> #includ...
    99+
    2024-04-02
  • C++中Boost的智能指针scoped_ptr
    boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放。下列代码演示了该指针的基本应用: #includ...
    99+
    2024-04-02
  • c++智能指针unique_ptr的使用
    目录1.为什么需要unique_ptr2.什么是unique_ptr3.unique_ptr特性4.如何使用unique_ptr4.1简单使用4.2指向数组5.unique_ptr需...
    99+
    2024-04-02
  • C++中Boost的智能指针shared_ptr
    boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shar...
    99+
    2024-04-02
  • C++ 函数库如何使用智能指针?
    智能指针用于管理指针并在对象超出作用域时自动释放内存,以防止内存泄漏。常见函数库包括:std::unique_ptr:管理指向唯一对象的指针。std::shared_ptr:管理指向共享...
    99+
    2024-04-18
    c++ 智能指针 作用域
  • C++的智能指针使用实例分析
    今天小编给大家分享一下C++的智能指针使用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是RAIIRAII(Re...
    99+
    2023-06-29
  • C++智能指针使用实例分析
    这篇文章主要介绍了C++智能指针使用实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++智能指针使用实例分析文章都会有所收获,下面我们一起来看看吧。1.简介程序运行时存在静态空间、栈和堆区,用堆来存储动...
    99+
    2023-06-30
  • C++智能指针实例代码分析
    这篇文章主要讲解了“C++智能指针实例代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++智能指针实例代码分析”吧!一、内存泄漏-永恒的话题动态申请堆空间,用完后不归还C++ 语言中...
    99+
    2023-06-30
  • C++ 智能指针:让指针更加智能,摆脱内存管理的烦恼
    智能指针:c++++ 中的特殊指针,封装原始指针,提供额外的功能。类型:std::unique_ptr:唯一所有权,指针失效后释放内存。std::shared_ptr:共享所有权,最后一...
    99+
    2024-05-09
    c++ 智能指针
  • C/C++中智能指针的用法详解
    目录前言一、什么是智能指针二、使用方法1.shared_ptr2.unique_ptr3.weak_ptr前言 本章主要介绍一些C/C++中智能指针的实现原理以及如何使用 一、什么是...
    99+
    2023-01-04
    C++智能指针使用 C++智能指针
  • C++11 智能指针的具体使用
    目录智能指针的原理RAII智能指针的原理auto_ptr1.auto_ptr的使用及问题unique_ptrshared_ptrshared_ptr的循环引用智能指针的原理 RAII...
    99+
    2024-04-02
  • 一起聊聊C++中的智能指针
    目录一:背景二:关键词解析1. auto_ptr2. auto_ptr 多引用问题一:背景 我们知道 C++ 是手工管理内存的分配和释放,对应的操作符就是 new/dele...
    99+
    2024-04-02
  • c++智能指针的超详细讲解
    目录1.什么是智能指针2.原始指针的问题3.unique_ptr4.shared_ptr5.shared_ptr使用需要注意的点5.1 不能将一个原始指针初始化多个shared_pt...
    99+
    2024-04-02
  • C++11中的智能指针怎么用
    本篇内容介绍了“C++11中的智能指针怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!函数原型:shared_ptr& oper...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作