当前位置:网站首页>11 在 operator= 中处理“自我赋值”
11 在 operator= 中处理“自我赋值”
2022-07-26 10:32:00 【JeffyGao】
条款- 11 在 operator= 中处理“自我赋值”
- 确保当对象自我赋值时 operator= 有良好行为。其中技术包括比较“来源对象” 和 “目标对象”的地址、精心周到的语句顺序、以及 copy-and-swap。
- 确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。
“自我赋值”很容易被使用,虽然没有意义,但若不加以 处理会造成系统报错。
法 1 传统做法:在 operator= 里做一个“证同测试( identity test )”达到“自我赋值”的检测目的。
widget& widget::operator=( const widget& rhs ){ if ( this == &rhs ) return *this; // 证同测试( identity test ) // 如果是自我赋值,就不做任何事 delete pb; pb = new Bitmap( *rhs.pb ); return *this; }法2 拷贝副本,让operator= 具备异常安全性
widget& widget::operator=( const widget& rhs ){ Bitmap* pOrig = pb; // 记住原先的 pb pb = new Bitmap( *rhs.pb ); // 令 pb 指向 *pb 的一个副本 delete pOrig; // 删除原先的 pb return *this; }
边栏推荐
- Inheritance method of simplified constructor (I) - combined inheritance
- .NET操作Redis Set无序集合
- Comparison of packet capturing tools fiddler and Wireshark
- js,e.pageX、pageY模态框拖动
- 面试第一家公司的面试题及答案(一)
- L2-005 集合相似度(vector、set求并交集)
- 关于函数模板描述错误的是(链接格式错误怎么解决)
- Review of database -- 3. SQL language
- 【Halcon视觉】图像灰度变化
- Use spiel expressions in custom annotations to dynamically obtain method parameters or execute methods
猜你喜欢

.NET 开源框架在工业生产中的应用

js 获得当前时间,时间与时间戳的转换
![[Halcon vision] software programming ideas](/img/9b/a27338689ee4598dac88f6e5d92053.png)
[Halcon vision] software programming ideas

INSTALL_ FAILED_ SHARED_ USER_ Incompatible error resolution
The software cannot be opened

抓包工具fiddler和wireshark对比
![[Halcon vision] affine transformation](/img/f1/32284c71e78e6eea390fdb6058ba0f.png)
[Halcon vision] affine transformation

单元测试,到底什么是单元测试,为什么单测这么难写

SAP ABAP Netweaver 容器化的一些前沿性研究工作分享

videojs转canvas暂停、播放、切换视频
随机推荐
Android greendao数据库的使用
【Halcon视觉】图像灰度变化
datav漂亮数据屏制作体验
json_object_put: Assertion `jso->_ref_count > 0‘ failed.Aborted (core dumped)
Function templates and non template functions with the same name cannot be overloaded (definition of overloads)
我们的Web3创业项目,黄了
Listening freely, the next stop of online text traffic competition?
RecyclerView最后一条显示不全或显示部分的问题解决
函数模板与同名的非模板函数不可以重载(重载的定义)
Perfect / buffer motion framework in sentence parsing JS (for beginners)
【Halcon视觉】算子的结构
关于模板函数声明与定义的问题[通俗易懂]
String null to empty string (what does empty string mean)
关于函数模板描述错误的是(链接格式错误怎么解决)
.NET操作Redis Hash对象
Self encapsulated database dbutils universal template
面试第二家公司的面试题及答案(二)
畅听,网文流量竞争的下一站?
videojs转canvas暂停、播放、切换视频
Using undertow, Nacos offline logout delay after service stop