C++基础::shared_ptr 编程细节(二)
C++基础::shared_ptr 编程细节(一)
C++基础::shared_ptr 编程细节(二)
C++基础::shared_ptr 编程细节(三)
*sp 与 sp.get()
- sp.get():返回存储(所持有)的 pointer,也即被持有物的地址
- *sp:返回拥有的对象
三种初始化的方法
基本的单参构造
shared_ptr<string> pNico(new string("nico"));
由于“接受单一 pointer 作为唯一实参”的构造函数是 explicit,
shared_ptr<string> pNico = new string("nico");// ERROR shared_ptr<string> pNico{new string("nico")};
使用便捷函数 make_shared
shared_ptr<string> pNico = make_shared<string>("nico");
先声明,再 reset
std::shared_ptr<std::string> pNico; pNico = new std::string("nico");// ERROR: no assignment for ordinary pointers(对普通指针而言没) pNico.reset(new std::string("nico"));
operator ==(shared_ptr对象的相等性比较)
首先来看 shared_ptr相等操作符
(equality operator)的实现形式,
template<class T, class U> inline bool operator==(shared_ptr<T> const & a, shared_ptr<U> const & b)
{return a.get() == b.get();
}
而 shared_ptr<T>的get()
成员返回的是所持有物的地址,若不拥有对象则返回 nullptr。
class A
{
public:A(int){}
};int main(int, char**)
{shared_ptr<A> pA = make_shared<A>(5);shared_ptr<A> pA2 = pA;std::cout << std::boolalpha << (pA == pA2) << std::endl;std::cout << (pA.get() == pA2.get()) << std::endl;// true,true// 以上两个判断等价,其实比较的是指针,也即是否指的是同一对象std::cout << (*pA == *pA2) << s;// ERROR// 此时比较的不是指针,而是对象本身,// 两个类实例的operaotr ==,要求必须在类的内部给出operator==的实现return 0;
}
也即:
sp1 == sp2
sp1.get() == sp2.get()
比较的是两个指针是否相同,也即两个 shared_ptr 对象是否持有的是对同一个对象的指针,其实这种比较更为严格,因为这里比较的是两者是否是同一件东西
*sp1 == *sp2
比较的是对象是否相等,如果是类类型,类的内部需要给出operator==的实现,否则出错,如果是基本类型,则比较的是其值;
C++基础::shared_ptr 编程细节(二)相关推荐
- C++基础::shared_ptr 编程细节(三)
C++基础::shared_ptr 编程细节(一) C++基础::shared_ptr 编程细节(二) C++基础::shared_ptr 编程细节(三) boost::shared_ptr std: ...
- C++基础::shared_ptr 编程细节(一)
C++基础::shared_ptr 编程细节(一) C++基础::shared_ptr 编程细节(二) C++基础::shared_ptr 编程细节(三) 智能指针是c++ 中管理资源的一种方式,用智 ...
- 编程之基础:数据类型(二)
相关文章连接: 编程之基础:数据类型(一) 高屋建瓴:梳理编程约定 动力之源:代码中的"泵" 完整目录与前言 编程之基础:数据类型(二) 3.1 引用类型与值类型 41 ...
- 实体类 接口_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)
原文:Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口, 视频讲解) 这里分享三道编程题, 下面是我个人的视频讲解 二维数组, 五子棋游戏, 实体类和接口_哔哩哔哩 (゜-゜)つロ ...
- C# Revit二次开发基础/核心编程---建筑建模-标高和轴网
一.本节课程 C# Revit二次开发基础/核心编程---建筑建模-标高和轴网 二.本节要讲解的知识点 1.标高的高度.创建标高 2.轴网曲线.创建轴网 具体内容 1.标高 标高是有限水平平面,大多数 ...
- C# Revit二次开发基础/核心编程--- Application\Document\Transaction
一.本节课程 C# Revit二次开发基础/核心编程--- Application\Document\Transaction 二.本节要讲解的知识点 Application\Document\Tran ...
- 【Scheme】Scheme 编程学习 (二) —— 基础
[Scheme]Scheme 编程学习 (二) -- 基础 文接前一节内容 : [Scheme]Scheme 编程学习(一) -- 概述 本文章可以跟视频课程一起看,做了一些补充说明 原视频地址: B ...
- PHP编程基础实验二之php基础语法编程(四)
实验2-4 PHP基础语法编程(四) 1.实验学时 2学时 2.实验目的 1.进一步熟悉 PHP 基本语法: 2.掌握 PHP 中字符串数据的定义与常用处理方法: 3.掌握 PHP 中数组数据的定义 ...
- b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释
b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释 继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更 ...
最新文章
- 一位人工智能总监对AI行业的【实话实说】
- java中的抛出异常throws与throw
- CF 19D Points 【线段树+平衡树】
- 【我的Android进阶之旅】Android自定义Lint实践
- android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)
- python程序打包成安卓app教程_Python打包方法基本应用方式介绍
- oracle 时间加减
- JEECG移动方案 - 应用系统转换移动应用的中间件实现方案
- python-类的装饰器
- Opencv笔记(十八)——轮廓的更多函数及其层次结构
- 如何做组间差异检验_买套餐送车险,做维修提供代步车,考拉爱车如何实现差异化竞争?...
- Android Native Hook工具
- 如何实现一张图片覆盖窗体 - 回复 客栈老人 的问题
- 基于SSM的酒水商城系统
- hibernate官网文档
- Zemax操作38--POP(物理光学传播)的用法
- springboot 自定义starter
- 中国大学慕课python答案 北京理工大学_中国大学MOOC慕课_Python语言程序设计_慕课答案...
- Java - Certificate has been revoked
- vmware linux dns,vmware环境下在linux中创建dns服务器
热门文章
- Navicat加载缓慢
- Spark Streaming之Window Operations操作和解析
- python set_Python的set集合详解
- iostream stdlib fstream io.h 头文件的作用
- OpenCV实现立体视觉的案例
- python 设计模式之装饰器模式 Decorator Pattern
- VMware ESXi 虚拟机硬盘格式:精简置备、厚置备延迟置零、厚置备置零
- [文摘20071008]全国软考相关-计算机技术与软件专业资格(水平)考试
- UVA1363 LA3521 POJ2800 ZOJ2646 Joseph‘s Problem【约瑟夫环+数学】
- HDU2049 不容易系列之(4)——考新郎【递推】