本文主要介绍“为什么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