如果一个对象是独一无二的,那么我们就不应该提供copy构造函数和copy assignment操作符函数(二者统称为copying函数)。但是即使我们不定义它们,编译器也会在别人调用它们时默认提供,如何拒绝编译器的这种行为呢?由于编译器自动生成的函数都是public的,因此你可以提供private的...
分类:
其他好文 时间:
2015-05-25 09:51:29
阅读次数:
280
对象复制操作operator=或copy构造函数,一定要记得复制对象每一个成份,特别是base class的成分:
注意:...
分类:
其他好文 时间:
2015-05-18 23:05:46
阅读次数:
122
条款5 了解c++默默编写并调用哪些函数编译器自动生成的copy 构造函数,copy赋值操作符,析构函数,构造函数,这些都是public和inline的,此处inline的意思是他们的定义都是在头文件当中的假设有一个引用类型的数据成员,那么上面的赋值操作是不对的,因为引用不能改变条款6 如不想使用编...
分类:
编程语言 时间:
2015-05-09 23:26:15
阅读次数:
167
编译器在检测到有对象创建、赋值或者以copy构造函数的方式创建对象时会自动生成函数:...
分类:
编程语言 时间:
2015-05-08 18:10:27
阅读次数:
159
条款五class Empty { };
这样的一个类,当C++处理过后,编译器会为它声明一个copy构造函数、一个copy assignment操作符、一个析构函数和一个default构造函数,所有这些函数都是public且inline。class Empty {
public:
Empty() { ... }
Empty(const Empty& rhs) { ... }...
分类:
编程语言 时间:
2015-04-28 11:57:50
阅读次数:
156
《Effective C++》第二章:构造/析构/赋值运算
C++默认编写的函数。C++编译器如果没有发现以下函数,就会为类生成一份默认版本的:
1) default构造函数
2) default析构函数
3) copy构造函数
4) copy assignment操作符(=运算符)
前两个函数并不总是产生,它只在编译器需要的时候才产生出来。后两个函数只保证以bitwise语义拷贝...
分类:
编程语言 时间:
2015-04-21 11:16:23
阅读次数:
118
什么时候empty class(空类)不再是个empty class呢?当C++处理过它之后,是的,如果你自己没有声明,编译器就会为它声明(编译器版本)一个copy构造函数、一个copy assignment操作符和一个析构函数。此外如果你没有声明任何构造函数,编译器也会为你声明一个default构...
分类:
编程语言 时间:
2015-03-12 18:31:00
阅读次数:
127
Copying函数应该确保复制“对象内的所有成员变量”及“所有base class成分”。不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个coping函数共同调用。如果你发现你的copy构造函数和copy assignment操作符有相近的代码,...
分类:
编程语言 时间:
2015-01-30 14:49:52
阅读次数:
215
条款05:了解C++默默编写并调用哪些函数
编译器可以暗自为class创建default构造函数、copy构造函数、copy
assignment操作符,以及析构函数。
只有这些函数需要(被调用)时,它们才会被编译器创建出来。在编译器产生的复制构造函数和赋值运算符执行的都是浅拷贝。当数据成员是引用或者常量的时候,编译器不知道该怎么处理,两手一摊,无能为力。
当某个基类将cop...
分类:
编程语言 时间:
2015-01-17 11:15:46
阅读次数:
220
■本文内容■□第一节 在条款五的讲解中,我们已经知道编译器是聪明的家伙,它会帮助你生成类的构造函数、析构函数、一个copy构造函数和一个赋值运算符。有时真的要感谢编译器所做的这一切,因为我们确实需要如此。但有的时候这一切又会给我们带来麻烦,本条款的介绍主题是麻烦的产生及如何解决。□第二节 ...
分类:
其他好文 时间:
2014-11-10 19:39:07
阅读次数:
166