博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scope_ref的实现
阅读量:5091 次
发布时间:2019-06-13

本文共 836 字,大约阅读时间需要 2 分钟。

#pragma once

#include <assert.h>

#define DISALLOW_COPY_AND_ASSIGN(TypeName)\

    TypeName(const TypeName&)();
    void operator(const TypeName&);

template<class T>

class Scope_ref{
public:
    explicit Scope_ref(T* ptr):ptr_(ptr){}
    ~Scope_ref(){
        delete ptr_;
    }

    T* get(){

        assert(ptr_);
        return ptr_;
    }

    void Reset(T* p){

        if (p != ptr_)
        {
            delete ptr_;
            ptr_ = p;
        }
    }
    void Release(){
        assert(ptr_);
        T* temp = ptr_;
        ptr_ = NULL;
        return temp;
    }

    T& operator*(){

        return *ptr_;
    }

    T* operator->(){

        return ptr_;
    }

    bool operator==(T* p)const {return p == ptr_;}

    bool operator!=(T* p) const {return p!= ptr_;}
private:
    T* ptr_;

    template<class T2> bool operator==(Scope_ref<T2> const&t2)const;

    template<class T2> bool operator!=(Scope_ref<T2> const&t2)const;
    DISALLOW_COPY_AND_ASSIGN(Scope_ref);
};

转载于:https://www.cnblogs.com/sybtjp/archive/2012/04/25/2470101.html

你可能感兴趣的文章
深入浅出设计模式——桥接模式(Bridge Pattern)
查看>>
使用MongoDB C#官方驱动操作MongoDB
查看>>
【转】Android UI系列-----时间、日期、Toasts和进度条Dialog
查看>>
【转】photoshop CS2安装激活破解教程
查看>>
【转】session setup failed: NT_STATUS_LOGON_FAILURE -- 不错
查看>>
UNIX env查找技巧
查看>>
【转】cvMorphologyEx —不推荐使用
查看>>
Makedown
查看>>
linked-list-cycle
查看>>
文件安装的2中方式
查看>>
win产品下载地址及破解工具
查看>>
cms STW 的两个阶段
查看>>
bestcoder#45 1002 求区间的逆序数 树状数组
查看>>
Js操作表格-对表格单元格的添加删除修改
查看>>
[AtCoder][ARC082]Sandglass 题解
查看>>
font-face跨域办法
查看>>
Porsche Piwis Tester 2 Online Coding Guide
查看>>
vue笔记3——双向绑定
查看>>
记一次前端笔试
查看>>
Nginx的启动、停止与重启
查看>>