智能指针

#include <iostream>

using namespace std;
template<class T>
class SmartPtr{
public:
    explicit SmartPtr():ptr(nullptr), count(new int(0)){}
    explicit SmartPtr(T* p):ptr(p), count(new int(0)){
        *count = 1;
    }
    ~SmartPtr(){
        --(*count);
        if(*count == 0){
            delete(count);
            delete(ptr);
            count = nullptr;
            ptr = nullptr;
        }
    }
    //拷贝构造
    SmartPtr(const SmartPtr<T> &other){
        count = other.count;
        ptr = other.ptr;
        ++(*count);
    }
    SmartPtr& operator= (const SmartPtr<T> &other){
        count = other.count;
        ptr = other.ptr;
        ++(*count);
        return (*this);
    }
    T& operator*(){
        return *ptr;
    }
    T* operator->(){
        return ptr;
    }
    void swap(SmartPtr<T> other){
        std::swap(*this, other);
    }
    void use_count(){
        cout<<(*count)<<endl;
    }
private:
    T *ptr;
    int* count{};
};


int main() {

    SmartPtr<int> ptr1(new int(1));
    ptr1.use_count();
    SmartPtr<int> ptr2(ptr1);
    ptr1.use_count();
    ptr2.use_count();
    SmartPtr<int> ptr3 = ptr2;
    ptr1.use_count();
    ptr2.use_count();
    ptr3.use_count();

    return 0;
}

posted @   蘑菇王国大聪明  阅读(26)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示