obs 之 OBSObj

2023-11-19



从实例学习c++之:

1. 内联构造/虚构
2. 移动构造/移动赋值
3. 禁用拷贝构造和赋值
4. 该类虚构不为 virtual 
5. 使用实例 using OBSDisplay = OBSObj<obs_display_t*, obs_display_destroy>;

//k 18-02-06 23:13 2 zn#1 不被实例化的对象
//k 18-02-06 23:47 28 zn#1 这里 destroy 是一个 nontyp parameter,第一次见这个用法
/* objects that are not meant to be instanced */
template<typename T, void destroy(T)> class OBSObj
{
    T obj;

public:
    //k 18-02-06 23:32 3 zn#1 构造函数内联;见 effective c++ item 30,说了很多函数(包括构造)内联的不利之处
    //k 18-02-06 23:33 9 zn#1 这是另一种说法 ,构造函数与析构函数在代码链接上并没有什么不同,只是一般不显式调用罢了,所以可以inline是肯定的。
    inline OBSObj() : obj(nullptr)    {}
    inline OBSObj(T obj_) : obj(obj_) {}
    //k 18-02-06 23:34 14 zn#1 禁用 copy ctor
    inline OBSObj(const OBSObj&) = delete;
    //k 18-02-06 23:35 16 zn#1 移动构造函数
    //k 18-02-06 23:44 18 zn#1 参数是一个右值引用
    inline OBSObj(OBSObj &&other) : obj(other.obj)
    {
        other.obj = nullptr;
    }

    inline ~OBSObj()
    {
        destroy(obj);
    }

    inline OBSObj &operator=(T obj_)
    {
        if (obj_ != obj)
            destroy(obj);
        obj = obj_;
        return *this;
    }
    //k 18-02-06 23:45 22 zn#1 赋值
    inline OBSObj &operator=(const OBSObj&) = delete;
    //k 18-02-06 23:45 23 zn#1 移动赋值
    inline OBSObj &operator=(OBSObj &&other)
    {
        if (obj)
            destroy(obj);
        obj       = other.obj;
        other.obj = nullptr;
        return *this;
    }

    inline operator T() const
    {
        return obj;
    }

    //k 18-02-06 23:46 24 zn#1 关系运算符重载, == 和 !=
    inline bool operator==(T p) const
    {
        return obj == p;
    }
    inline bool operator!=(T p) const
    {
        return obj != p;
    }
};

 

转载于:https://www.cnblogs.com/IS2120/p/8424811.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

obs 之 OBSObj 的相关文章

随机推荐

  • 关于python爬虫的准备工作

    目录 1 什么是网络爬虫 2 准备工作 1 什么是网络爬虫 百度百科所给注释如下 网络爬虫 又称为网页蜘蛛 网络机器人 在FOAF社区中间 更经常的称为网页追逐者 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 另外一些不常使用的
  • vm使用PE安装系统(2)

    接上次教程 vm使用PE安装系统 1 提要 此虚拟机安装方法适用于所有系统格式如ISO ESD GHO WIM等系统格式 第一步 打开DG硬盘分区 选择左侧栏进行的 HD0 右键选择快速分区 一般情况下选择自定义选择两个分区 然后右边内容栏
  • 芯片开发语言的简单区别介绍。Verilog、VHDL、System Verilog、SystemC、Matlab、C/C++等

    芯片开发语言的简单区别介绍 芯片设计前端的流程很长 和芯片前端相关的语言也很多 比如Verilog VHDL System Verilog SystemC Matlab C C 等等 但没有一个语言能够做到适合于整个前端流程 每种语言都有适
  • 【Kubernetes运维篇】零故障升级Pod健康探测详解

    文章目录 一 Pod健康探测介绍 1 三种容器探测方法 2 常用三种探测探针 3 探针相关属性说明 二 探测案例 1 Pod启动探测案例 startupProbe 2 Pod存活探测案例 livenessProbe 3 Pod就绪探测案例
  • QT QComboBox使用详解

    本文详细的介绍了QComboBox控件的各种操作 例如 下拉框添加内容 默认显示 获取下拉框总行数 获取选中索引 获取当前内容 清除列表 重绘下拉框等操作 本文作者原创 转载请附上文章出处与本文链接 QComboBox控件全面详解目录 1
  • RNA 31. SCI文章临床蛋白质组肿瘤在线数据挖掘神器(CPTAC)

    桓峰基因公众号推出转录组分析教程 有需要生信的老师可以联系我们 转录分析教程整理如下 RNA 1 基因表达那些事 基于 GEO RNA 2 SCI文章中基于GEO的差异表达基因之 limma RNA 3 SCI 文章中基于T CGA 差异表
  • 框架学习——带你了解SpringBoot框架

    目录 一 SpringBoot简介 1 1 原有Spring优缺点分析 1 1 1 Spring的优点分析 1 1 2 Spring的缺点分析 1 2 SpringBoot的概述 1 2 1 SpringBoot的特点 1 2 2 Spri
  • Qt(day3)

    思维导图 小练习 second h ifndef SECOND H define SECOND H include
  • (145) Table ‘./addon_collect_wukong_spider‘ is marked as crashed and should be repaired解决思路

    discuz更新插件时报错 145 Table addon collect wukong spider is marked as crashed and should be repaired解决办法 解决思路 打开phpmyadmin 选择
  • 用磁盘压缩卷新建分区和磁盘压缩卷还原问题

    转载 磁盘压缩卷新建分区 http jingyan baidu com article fedf073776922935ad897751 html 磁盘压缩卷还原 https zhidao baidu com question 304344
  • Linux常用命令之文件管理命令

    目录 1 ls 2 gt 输入 输出重定向和 管道命令 3 chmod命令 4 cd命令 5 mkdir和rmdir命令 6 cp命令 7 rm命令 8 mv命令 9 cat命令 10 pwd命令 11 ln命令 12 grep命令 13
  • http协议学习系列

    1 基础概念篇 1 1 介绍 HTTP是Hyper Text Transfer Protocol 超文本传输协议 的缩写 它的发展是万维网协会 World Wide Web Consortium 和Internet工作小组IETF Inte
  • 数据集加载--load_digits

    目录 主要参数 n class return X y as frame 返回值 return X y True return X y False Bunch对象的属性 data target feature names list targe
  • 100天精通Python(爬虫篇)——第47天:selenium自动化操作浏览器(基础+代码实战)

    文章目录 一 Selenium框架环境搭建 1 下载模块 2 安装浏览器驱动WebDriver 二 基础操作 1 打开浏览器 2 无界面模式 3 元素定位 4 元素操作 5 前进后退 6 执行js 7 页面等待 隐式等待 常用 显式等待 了
  • SPI、I2C、UART、CAN

    一 简介 1 SPI SPI Serial Peripheral Interface 串行外设接口 是Motorola公司提出的一种同步串行数据传输标准 在很多器件中被广泛应用 接口 SPI接口经常被称为4线串行总线 以主 从方式工作 数据
  • Go内存管理及性能观测工具

    内存管理 TCMalloc Golang内存分配算法主要源自Google的TCMalloc算法 TCMalloc将内存分成三层最外层Thread Cache 中间层Central Cache 最里层Page Heap Thread Cach
  • 利用hbase api在本地访问并操作服务器的hbase数据库

    最近因为实验室项目需要 开始研究了hbase 然后想一次性往集群服务器上写入大量的数据 并存到hbase中 考虑到在hbase shell下只能单个数据put 这样对于批量插入数据的要求完全不合适 于是就研究起hbase的java api
  • 只要 3 个注解,优雅的实现微服务鉴权!

    原创 不才陈某 码猿技术专栏 2023 04 17 08 50 发表于山东 大家好 我是不才陈某 前面的文章中介绍了网关集成Spring Security实现网关层面的统一的认证鉴权 有不清楚的可以看之前的文章 实战干货 Spring Cl
  • Java面向对象编程(建议收藏)

    面向对象编程是一种方法 被广泛引用与Java中 接下来我将从 包 继承 组合 多态 抽象类和接口这几个方面进行全面的讲解 一 包 包是组织类的一种方式 包从直观上看就是一个文件夹 jar包中包含的都是字节码文件 包一般分为导入默认包 静态导
  • obs 之 OBSObj

    从实例学习c 之 1 内联构造 虚构2 移动构造 移动赋值3 禁用拷贝构造和赋值4 该类虚构不为 virtual 5 使用实例 using OBSDisplay OBSObj