首页 > 编程语言 >C++ 智能指针简单实现

C++ 智能指针简单实现

时间:2024-07-19 15:40:56浏览次数:12  
标签:count nullptr C++ joker 智能 other shared ptr 指针

#pragma once
template<typename TR>
class joker_shared_ptr
{
private:
     TR * ptr;
     size_t * count;
public:
    constexpr joker_shared_ptr(/* args */)noexcept{ }
    constexpr joker_shared_ptr(std::nullptr_t )noexcept { }
    explicit joker_shared_ptr(TR * ptr):ptr(ptr),count(new size_t(1)){ }
    ~joker_shared_ptr()
    {
        if(count != nullptr && (*count) > 1)
        {
            (*count) -- ;
            return;
        }

        if(count != nullptr )   
        delete  count;
        if(ptr !=  nullptr )  
        delete ptr;

    }
    joker_shared_ptr(const joker_shared_ptr &other)noexcept:ptr(other.ptr),count(other.count)
    {
        if(count != nullptr)
        {
            (*count)++;
        }
    }

    joker_shared_ptr& operator=(const joker_shared_ptr & other)noexcept
    {
        if (this->get() == other.get()) {
            return *this;
        }

        if(count != nullptr)
        {
            (*count)--;
            if(*count == 0)
            {
                delete count;
                if(ptr != nullptr)
                    delete ptr;
            }
        }

        count = other.count;
        ptr = other.ptr;
        if(count != nullptr && ptr != nullptr)
        {
            (*count)++;
        }
        return *this;
    }

    size_t use_count() const noexcept
    {
        if( count != nullptr)
        {
            return *count;
        }
        else
        {
            return 0;
        }
    }

    TR* get()const noexcept
    {
       
        return ptr;

    }

    TR& operator*() const noexcept
    {
        return *ptr;
    }
};
#if 0
template<typename TR>
joker_shared_ptr<TR>& joker_shared_ptr<TR>::operator=(const joker_shared_ptr & other)noexcept
{
    if(count != nullptr)
    {
        (*count)--;
        if(*count == 0)
        {
            delete count;
            if(ptr != nullptr)
                delete ptr;
        }
    }

    count = other.count;
    ptr = other.ptr;
    if(count != nullptr && ptr != nullptr)
    {
        (*count)++;
    }
    return *this;
}
#endif

 

标签:count,nullptr,C++,joker,智能,other,shared,ptr,指针
From: https://www.cnblogs.com/JOKER2255/p/18311594

相关文章

  • 【学术会议征稿】第三届智能电网与能源系统国际学术会议(SGES 2024)
    第三届智能电网与能源系统国际学术会议20243rd InternationalConferenceonSmartGridandEnergySystems  第三届智能电网与能源系统国际学术会议(SGES2024)将于2024年10月25日-27日在郑州召开。   智能电网可以优化能源布局,让现有能源体系最大化的发挥其产能......
  • C++ 的 const 重载
    #include<iostream>#include<string>namespace{classA{public:constA&get_self()const{std::cout<<"常量版本"<<std::endl;return*this;}A......
  • 【C++】C++标准库iostream中cin、cout、cerr、clog方法解析
    目录一.iostream库介绍1.iostream主要的组件2.使用 iostream 二.cin介绍及使用三.cout介绍及使用四.cerr介绍及使用五.clog介绍及使用一.iostream库介绍1.iostream主要的组件在C++中, iostream 是一个非常核心的头文件,它定义了基本的输入输出流。这个头文件是......
  • 【稳定检索】2024年数据处理与人工智能国际会议(ICDPAI 2024)
    2024年数据处理与人工智能国际会议2024InternationalConferenceonDataProcessingandArtificialIntelligence【1】会议简介        2024年数据处理与人工智能国际会议是数据处理和人工智能领域的一次重要盛会。会议旨在通过全球范围内专家学者的深入交流,探......
  • AI人工智能深度学习算法:智能深度学习代理的环境感知与数据采集机制
    AI人工智能深度学习算法:智能深度学习代理的环境感知与数据采集机制作者:禅与计算机程序设计艺术/ZenandtheArtofComputerProgramming1.背景介绍1.1问题的由来随着人工智能技术的迅速发展,深度学习算法因其强大的模式识别和预测能力而被广泛应用。特别是在智能代......
  • 探索人工智能伦理的深层次问题与根本性挑战
    引言人工智能(AI)的迅速发展不仅推动了科技进步,也揭示了许多深层次的伦理问题和根本性挑战。这些问题包括数据隐私的保护、算法的公平性和透明度、人工智能决策的可信度以及对社会公平的影响。尽管国际社会已经出台了一系列法规来规范AI的使用,保护个人隐私和数据安全,但AI在辅......
  • AIOps:解决企业IT挑战的智能利器
    前言:在当今数字化的时代,企业IT基础设施和应用程序规模不断扩大,面临着日益复杂的挑战。在这种情况下,AIOps人工智能运维成为解决企业IT运维困境的智能利器。AIOps与可观测性密切相关,可观测性是实现AIOps的基础。通过收集、监视和理解系统数据,AIOps能够自动化运维任务、实时监控......
  • AI心灵伙伴:数业智能心大陆如何提升年轻成人的心理健康?
    在这个快节奏、高压力的社会中,年轻人面临着前所未有的心理挑战。从职场竞争到人际关系,再到经济压力,这些因素共同构成了年轻一代的心理负担。面对这些挑战,数业智能推出的心大陆AI心灵伙伴,以其高效、经济的优势,提供了一种创新的心理健康解决方案。本文将分析这一心大陆AI心灵伙伴如......
  • 算法刷题笔记 字符串哈希(C++实现)
    文章目录题目描述基本思路实现代码题目描述给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2,请你判断[l1,r1]和[l2,r2]这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数n和m,表示字符......
  • 算法刷题笔记 八数码(C++实现)
    文章目录题目描述基本思路实现代码题目描述在一个3×3的网格中,1∼8这8个数字和一个x恰好不重不漏地分布在这3×3的网格中。例如:123x46758在游戏过程中,可以把x与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下......