operator=的用法
- 连续赋值
例如 int x,y,z;
x=y=z=15;
为实现上述定义,可定义为
class Widget {
public :
Widget& operator=(const Widget& rhs)
{
return* this.
}
}
令赋值操作符号返回一个reference to *this. - 自我赋值
例如 Widget::operator=(const Widgett& rhs)
{
delete pb.
pb=new Bitmap(*rhs.pb);
return *this
}
这是一份不安全的operator实现版本,这里的自我赋值的问题是,operator=函数内的 *this和rhs有可能是同一个对象。如果这样的话delete就不只是销毁当前对象pb,它也销毁了rhs.在函数的末尾,widget持有的指针指向一个被销毁的对象。
如何改变这种错误,有一种做法是在删除前先检查一下this和rhs是否为同一个函数。例如
Widget& Widget::operator=(const Widget& rhs)
{
if(this==&rhs) return *this;
delete pb;
pb=new Bitmap(*rhs.ph);
return this.
}
也可以将pb的指针赋值给一个新的对象。
Widget& Widget::operator=(const Widget& rhs)
{
BitmappOrig=pb;
pb=new Bitmap(*rhs.pb);
delete pOrig;
return *this;
}
确保当对象自我赋值时operator=有良好行为,其中技术包括比较“来源对象”和“目标对象”的地址,精心周到的语句顺序,以及copy-and-swap.
确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。
operator=的用法相关推荐
- python3中 operator模块用法介绍
文章目录 概述 将运算符映射到函数 1基本方法 介绍 2 三个类介绍 2-1 attrgetter 介绍 2-2 itemgetter 使用介绍 1 用来排序 2 通过 获取多个值 2-3 metho ...
- OpenCV中Mat类的重载运算符operator()的用法
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 定义如下: inline Mat Mat::op ...
- python operator __gt___Python operator.gt方法代码示例
本文整理汇总了Python中operator.gt方法的典型用法代码示例.如果您正苦于以下问题:Python operator.gt方法的具体用法?Python operator.gt怎么用?Pyth ...
- (六)boost库之内存管理shared_ptr
1.shared_ptr的基本用法 boost::shared_ptr<int> sp(new int(10)); //一个指向整数的shared_ptr assert(sp.unique ...
- PowerShell 在 SharePoint 2010 自动化部署中的应用(2)-编译打包
上次说到通过PowerShell将项目代码从TFS服务器拿到本地,这次再说说编译和打包的经历 2 编译打包 我相信做过SharePoint2007的都有过打包时恶梦般的经历,Cabinet SDK,V ...
- cannot find implementation for com.xx.xx.xxDatabase. XXDatabase_Impl does not exist
参考:https://my.oschina.net/ldhy/blog/3146744 我之前使用 annotationProcessor 是没有问题的 image.png 查看全文 http://w ...
- boost之内存管理
smart_ptr库概述 计算机系统中资源有很多种,内存是我们最常用到的,此外还有文件描述符.socket.操作系统handle.数据库连接等,程序里申请这些资源后必须及时归还系统,否则就会产生难以预 ...
- ReactorKit
Swift ReactorKit 框架 ReactorKit 是一个响应式.单向 Swift 应用框架.下面来介绍一下 ReactorKit 当中的基本概念和使用方法. 目录 基本概念 设计目标 Vi ...
- Haproxy学习总结
一.Haproxy介绍 1.实现了一种事件驱动,单一进程模型,支持数万计的并发连接,用于为tcp和http应用程序提供高可用,负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制 ...
最新文章
- 动画演示10个有趣但毫无用处的Linux命令
- linux设备驱动第一篇:设备驱动程序简介
- 神州数码成为华为数通产物总代理
- php之去掉html标签,PHP删除HTMl标签
- 一个公式来说明加接圈的作用和缺点
- 分数相同名次排名规则C语言,如何给数据排名(相同分数相同名次)-excel篇
- Codeforces Round #296 (Div. 2) C. Glass Carving [ set+multiset ]
- 翻译: Web 3.0是一种几乎无需信任的承诺的协议/架构
- linux过滤端口抓包_linux抓包命令tcpdump
- RS232串口接线图
- GWT(Google Web Toolkit)是干嘛用的
- 树莓派存储方案_树莓派网络存储(NAS)
- springsecurity与gateway网关整合配置
- 如何获取淘宝/天猫商品历史价格信息的API接口
- 【联盛德W806上手笔记】九、DMA
- 实体链接在小布助手和OGraph的实践应用
- Anroid 逆向工具
- 电子白板无法触摸怎么办?
- 【流程挖掘的四个质量维度】简单度、拟合度、精确度和泛化度介绍
- sourcegraph/conc: Better structured concurrency for go