C++为什么要保持默认操作的一贯性

技术C++为什么要保持默认操作的一贯性这篇文章主要介绍“C++为什么要保持默认操作的一贯性”,在日常操作中,相信很多人在C++为什么要保持默认操作的一贯性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

本文主要介绍“为什么C要保持默认操作的一致性”。在日常操作中,相信很多人对C为什么要保持默认操作的一致性有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解答“为什么C要保持默认操作的一致性”的疑惑!接下来,请和边肖一起学习!

C.22:保持默认操作的一贯性

Reason(原因)

默认操作在概念上是一整套处理,配合严格。它们的语义是相互关联的。如果复制/移动构造和复制/移动分配在逻辑上做了不同的事情,用户会感到惊讶。如果构造函数和析构函数没有为资源管理提供一致的想法,用户会感到惊讶。如果复制和移动操作没有相应的构造函数和析构函数动作,用户会感到惊讶。

Example, bad(反面示例)

类傻{ //BAD:复制操作不一致

Impl类{

//.

};

shared _ ptrImpl p;

公众号:

傻(const傻a): p { a . p } { * p=* a . p;} //深度复制

傻算符=(const傻a){ p=a . p;} //浅拷贝

//.

};这些操作(复制构造和赋值)对于复制有不同的语义(分别是深度复制和轻度复制)。这会导致混乱和错误。

'

Enforcement(实施建议)

ul class='

(复杂)复制/移动构造函数和相应的复制/移动赋值运算符应该在相同的取消引用级别上编写相同的成员变量。

(复杂)在复制/移动构造函数中编写的任何成员变量也应该由其他构造函数初始化。

(复杂)如果复制/移动构造函数对成员变量进行深度复制,析构函数应该修改成员变量。

(复杂)如果析构函数修改了一个成员变量,该成员变量应该写入复制/移动构造函数或赋值操作符。

至此,“C为什么要保持默认操作的一致性”的研究结束,希望能解决大家的疑惑。理论和实践的结合可以帮助你学得更好。去试试吧!如果你想继续学习更多的相关知识,请继续关注网站,边肖会继续努力,给大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/124815.html

(1)

相关推荐

  • springboot整合druid

    技术springboot整合druid springboot整合druid一.SpringBoot整合Druid
    Druid是阿里巴巴的一个开源项目,是一个数据库连接池的实现,结合了C3P0、DBCP、

    礼包 2021年11月12日
  • 3v,电磁阀3v和4v的区别

    技术3v,电磁阀3v和4v的区别电磁阀中 3v 、4v、 2v的区别3v:工作原理、类别和参数。
    一、工作原理:
    1、电磁阀中3v 的工作原理是二位三通电磁阀,为双线圈控制,一个线圈瞬间通电后关闭电源、阀打开,另一个线圈

    生活 2021年10月24日
  • 抖音粉丝怎么涨,抖音如何涨粉?

    技术抖音粉丝怎么涨,抖音如何涨粉?不得不说,在抖音上一切皆有可能,甚至很多人莫名其妙就火了,自己也是猝不及防。随着越来越多的网红的出现,许多人都纷纷加入抖音行列,希望一夜爆红,但是又往往事与愿违,有没有好一点的涨粉套路,

    测评 2021年10月20日
  • win10组策略怎么打开,win10组策略打不开怎么办

    技术win10组策略怎么打开,win10组策略打不开怎么办1、打开电脑win10组策略怎么打开,在win10系统桌面上的空白处鼠标右键点击新建,然后点击新建文本文档选项;2、之后电脑桌面就会显示新建文本文档,然后双击打开

    生活 2021年10月30日
  • 怎么解决eureka中的Root name 'timestamp' does not match expected报错问题

    技术怎么解决eureka中的Root name timestamp does not match expected报错问题这篇文章主要介绍“怎么解决eureka中的Root name timestamp does not

    攻略 2021年11月16日
  • MySQL中cron如何定时执行SQL语句

    技术MySQL中cron如何定时执行SQL语句这篇文章主要介绍MySQL中cron如何定时执行SQL语句,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql脚本内容如下:#!/bin/bash

    攻略 2021年10月29日