Copy all parts of an object
copy构造函数和copy assignment操作符对一个类型的实例进行了copying。即使不刻意去编写,编译器一样会尽力相助。当你不需要编译器的好心相助时,也许会得到它的报复。假设字定义一个类型,并且实现了自己的copy构造函数和copy assignment:
现在X类型实现了自己的copy构造函数和copy assignment操作符,但如果当X类型又多了一个成员变量的时候,再编译时候编译器不会提醒我们当前X类型并没有实现所谓的Copy all parts of an object。这往往是违背了Copying函数原则的事情。
又如果X还有其派生类型,那么派生类型又没有做到这些事,编译器也懒的想提醒你。
基类型X的成员变量没有得到copying动作,为了承担起这份责任,必须调用基类型的copy构造函数以几copy assignment操作符。
所谓的复制每一个部分已经很清楚了,复制每一个当前类型内的成员变量,并调用基类型提供的copying函数。给一个建议,最好不要在copy assignment操作符里调用copy构造函数,这不是什么省事的动作,等同于构造了已经存在的对象。同样反会来在copy构造函数里调用copy assignment操作符也一样很无聊,copy构造函数是构造一个新的对象,而copy assignment操作符则是用于已经被构造过的对象上。
copy assignment操作符调用copy构造函数
copy构造函数调用copy assignment操作符
XX::XX(const XX& rhs) {
const_cast<XX*>(this) = &XX::operator =(rhs);
}
需要记住的
l 要确保拷贝函数拷贝对象的所有的数据成员,及其基类的所有部分,不要有遗漏。
l 不要尝试去实现一个拷贝函数来供其它的拷贝函数调用。取而代之的是,把公共部分放入一个“第三方函数”中共所有拷贝函数调用。
分享到:
相关推荐
条款12:复制对象时勿忘其每一个成分 3.资源管理 条款13:以对象管理资源 条款14:在资源管理类中小心Coping行为 条款15:在资源管理类中提供对原始资源的访问 条款16:成对使用new和delete对象置入智能指针 ...
条款12:尽量使用初始化而不要在构造函数里赋值 条款13:初始化列表中成员列出顺序和它们在类中的声明顺序相同 条款14:确定基类有虚析构函数 条款15:让OPERATOR=返回*THIS的引用 条款16:在OPERATOR=中对所有数据成员...
Effective C++:改善程序与设计的55个具体做法(中文第三版)亚马逊图书 放到Kindle上就可以浏览学习,因为亚马逊软件有防护功能,电脑上无法使用,切记!!!!
作者简介 作者:(美国)迈耶斯(Scott Meyers) 迈耶斯(Scott Meyers),二十多年来,Scott Meyers的Effective C++系列书籍(包括《Effective C++》《More Effective C++》和《Effective STL》)为C++编程语言...
条款12: 尽量使用初始化而不要在构造函数里赋值 条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同 条款14: 确定基类有虚析构函数 条款15: 让operator=返回*this的引用 条款16: 在operator=中对所有...
Effective C++跟more Effective c++
学习C++ 和STL学习学习的书,三合一(共140种改善您的C++程序的经验之谈,C++程序员必读),英文原版,带书签,2018版本。难得的c++学习资料
条款12:了解「掷出一个 exception」与「传递一个参数」 或「调用一个虚函数」之间的差异 061 Understand how throwing an exception differs from passing a parameter or calling a virtual function 条款13:以 ...
C++: Effective Modern C++ (C++ 11, C++ 14) (guide,C Programming, HTML, Javascript, Programming,all,internet, Coding, CSS, Java, PHP Vol 1) By 作者: Paul Laurence ISBN-10 书号: 1547133244 ISBN-13 书号:...
二、复制对象时确保复制所有成员 下面的类有两个成员变量,因此我们需要为每一份成员进行一份复制 Customer::Customer(const Customer& rhs) :name(rhs.name),lastTransaction(rhs.lastTransaction) { } Customer&...
电子版的effective c++ 和more effective c++ c++四书五经中介绍的经典书籍
有人说C++程序员可以分成两类,读过Effective C++的和没读过的。世界顶级C++大师Scott Meyers成名之作的第三版的确当得起这样的评价。当您读过《Effective C++中文版(第3版改善程序与设计的55个具体做法)》后,就...
中文版 chm Effective C++ More effective C++
effective c++ & more effective c++ 纯文字版
条款12:复制对象时勿忘其每一个成分 copy all parts of an object. 3. 资源管理 resource management 条款13:以对象管理资源 use objects to manage resources. 条款14:在资源管理类中小心coping行为 think ...
Effective C++ & More Effective C++.chm
Effective c++.pdf Effective c++.pdf
effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective c++ word版 effective ...
几乎在所有C++书籍的推荐名单上,这部专著都会位于前三名。作者高超的技术把握力,独特的视角、诙谐轻松的写作风格、独具匠心的内容组织,都受到极大的推崇和仿效。 《Effective C++:改善程序与设计的55个具体做法...