effective c++ 条款12 copy all parts of an object
这经常发生在更改代码的时候,当有自己的copy 赋值函数或者copy 构造函数时,编译器就不会维护这两个函数。导致发生遗忘。
可能出现的场景
class Customer
{
private:
std::string name;
public:
Customer(const Customer& rhs):name(rhs.name){};
Customer& operator=(const Customer& rhs)
{
name = rhs.name;
return *this;
}
}
这一切都很美好直到
case 1:在代码维护时很常见
class Customer
{
private:
std::string name;
Date modifiedDate; // added
public:
Customer(const Customer& rhs):name(rhs.name){};
Customer& operator=(const Customer& rhs)
{
name = rhs.name;
return *this;
}
}
这个时候增加了ModifiedDate 却忘记修改拷贝构造函数和赋值函数
case 2:发生在继承的时候
class AdvancedCustomer:Customer
{
private:
int creditAmount;
public:
AdvancedCustomer(const AdvancedCustomer& rhs):creditAmount(rhs.creditAmount){};
AdvancedCustomer& operator=(const AdvancedCustomer& rhs)
{
creditAmount = rhs.creditAmount;
return *this;
}
}
这个时候只有继承类的成员被赋值,基类的成员却没有,解决方法是调用基类的相关函数
class AdvancedCustomer:Customer
{
private:
int creditAmount;
public:
AdvancedCustomer(const AdvancedCustomer& rhs): Customer(rhs) // added to initial member of base class
creditAmount(rhs.creditAmount){};
AdvancedCustomer& operator=(const AdvancedCustomer& rhs)
{
Customer::operator=(rhs); // added to initial member of base class
creditAmount = rhs.creditAmount; return *this;
}
}
effective c++ 条款12 copy all parts of an object的更多相关文章
- Effective C++ Item 12 Copy all parts of an object
This one is simple, do not forget to copy all parts of an object in copy constructor or assignment o ...
- 条款12:复制对象时勿忘其每一个成分(Copy all parts of an object)
NOTE: 1.Copying 函数应该确保复制“对象内的所有成员变量”及“所有base class成分”. 2.不要尝试以某个copying函数实现另一个copying函数.应该将共同机能放进第三个 ...
- Effective C++ 条款12
复制对象时,勿忘其每个成分 作者在本节条款提醒我们,在多重继承的情况下进行copy或者copy assignment 的operator=的编写时,一定要考虑base 类部分数据的初始化后者复制. 对 ...
- Effective C++ -----条款12: 复制对象时勿忘其每一个成分
Copying函数应该确保复制“对象内的所有成员变量”及“所有base class成分”. 不要尝试以某个copying函数实现另一个copying函数.应该将共同机能放进第三个函数中,并由两个cop ...
- Effective C++ 条款12:复制对象时勿忘其每一个成分
void logCall(const std::string& funcName); class Customer { public: ... Customer (const Customer ...
- [EffectiveC++]item12:copy all parts of an object
在小书C++中,4.2.2 派生类的构造函数和析构函数的构造规则(103页) 在定义派生类对象时,构造函数执行顺序如下: 基类的构造函数 对象成员的构造函数 派生类的构造函数.
- 《Effective C++ 》学习笔记——条款12
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- [More Effective C++]条款22有关返回值优化的验证结果
(这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大.书生注) 在[More Effective C++]条款22的最后,在返回 ...
- More Effective C++ 条款0,1
More Effective C++ 条款0,1 条款0 关于编译器 不同的编译器支持C++的特性能力不同.有些编译器不支持bool类型,此时可用 enum bool{false, true};枚举类 ...
随机推荐
- osc搜索引擎框架search-framework,TngouDB,gso,
项目目的:OSChina 实现全文搜索的简单封装框架 License: Public Domain 包含内容: 重建索引工具 -> IndexRebuilder.java 增量构建索引工具 -& ...
- drupal 7 模块开发,hook_form
因为不是系统学习,只能把每天自己学习到的东西零碎的记录下来. 一来方便自己记忆,二来可供大家查阅. 后续有精力再去做进一步的整理. 1 开发一个模块分为有下面几个文件 hook.admin.inc h ...
- 基于DSP的疲劳驾驶检测系统的研究
原地址:http://www.chinaaet.com/article/index.aspx?id=114534 关键词:疲劳检测DSP亮瞳效应PERCLOS 摘 要: 针对汽车驾驶员疲劳驾驶检测的 ...
- LINUX专题之操作系统字符集
原创作品,出自 "深蓝的blog" 博客,欢迎转载.转载时请务必注明下面出处,否则追究版权法律责任. 深蓝的blog: http://blog.csdn.net/huangyanl ...
- python+ueditor+七牛云存储整合
开发环境:python pyramid. 參考网址:http://developer.qiniu.com/docs/v6/sdk/python-sdk.html,http://my.oschina.n ...
- hdu3006(状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3006 题意:给定一些集合,求这些集合所能组合的集合个数. 分析:这题就是用一个二进制数保存一个集合的元 ...
- C++ Primer中文版(第5版)
<C++ Primer中文版(第5版)> 基本信息 作者: (美)Stanley B. Lippman(斯坦利 李普曼) Josee Lajoie(约瑟 拉乔伊) Barbar ...
- python手记(46)
#!/usr/bin/env python # -*- coding: utf-8 -*- #http://blog.csdn.net/myhaspl #code:myhaspl@qq.com ...
- 【Java】运用JDBC实现一个注册、登录系统的编写
数据库的建立 首先,建立一个数据库,存储注册成功的账户信息. 其SQL的DDL语句如下: CREATE TABLE `jdbctest` ( `id` int(10) NOT NULL auto_in ...
- shell命令批量杀死MySQL连接进程
(1)将全部的MySQL连接进程杀掉 for i in `mysql -uroot -pzhangyun -Bse "show processlist" | grep -v &qu ...