当定义一个类时,我们显式地或隐式地指定在此类型的对象拷贝、移动、赋值和销毁时做什么。一个类通过定义五种特殊的成员函数来控制这些操作,包括:拷贝构造函数(copy constructor)、拷贝赋值运算符(copy-assignment operator)、移动构造函数(move constructor)、移动赋值运算符(move-assignment operator)和析构函数(destructo...
分类:
其他好文 时间:
2015-06-01 22:44:45
阅读次数:
97
实现二个类,一个是Message,另一个是Folder;类似于消息和消息目录,每个Message对象可以出现在多个Folder中。但是,任意给定的Message的内容只有一个副本。其结构依赖:为了记录Message位于哪些Folder中,每个Message都会保存一个它所在Folder的指针的s.....
分类:
其他好文 时间:
2015-03-30 17:47:23
阅读次数:
145
第13章 拷贝控制
1. 什么是拷贝构造函数? P440
如果一个类的构造函数的第一个参数是自己类类型的引用, 且所有其他参数都有默认值, 那么这就是一个拷贝构造函数.
2. 拷贝初始化和直接初始化. P441
如果初始化的时候使用等号”=”来初始化一个对象, 那么就是拷贝初始化.
相反, 如果初始化时, 没有用等号”=”, 那么就是直接初始化.
...
分类:
编程语言 时间:
2015-03-09 10:55:56
阅读次数:
244
当我们delete一个A* item 类型的指针时,该指针可能是指向A的,也可能指向的是B,C,D中的一个,编译器在delete时必须弄清楚到底应该执行A,B,C,D中哪一个类的析构函数。此时需要编译器进行动态绑定(即只有运行时才能知道到底item 指向的是那个类)。当在基类A中定义的析构函数为虚析...
分类:
编程语言 时间:
2014-11-13 23:55:26
阅读次数:
324
拷贝构造函数的第一个参数必须是引用类型,此参数几乎总是const的引用。拷贝构造函数在几种情况下会隐式地使用。因此,拷贝构造函数不应该是explicit的
即使我们定义了其他构造函数,在没有拷贝构造函数时,编辑器也会为我们合成的。编辑器从给定对象中依次将每个非static成员拷贝到创建的对象中。每个成员决定了它使用何种方式进行拷贝。类调用拷贝构造函数,数组逐个拷贝,内置类型直接拷贝
strin...
分类:
编程语言 时间:
2014-09-11 11:11:50
阅读次数:
342
15.26 定义Quote和Bulk_quote的拷贝控制成员,令其与合成的版本行为一致。为这些成员以及其他构造函数添加打印状态的语句,使得我们能够知道正在运行哪个程序。使用这些类编写程序,预测程序将创建和销毁哪些对象。重复实验,不断比较你的预测和实际输出结果是否相同,直到预测完全准确再结束。Quo...
分类:
其他好文 时间:
2014-08-30 20:24:09
阅读次数:
286
转自:http://www.cnblogs.com/ronny/p/3734110.html
对于部分内容会在接下来的文章中详细介绍
1,什么是类的拷贝控制
当我们定义一个类的时候,为了让我们定义的类类型像内置类型(char,int,double等)一样好用,我们通常需要考下面几件事:
Q1:用这个类的对象去初始化另一个同类型的对象。
Q2:将这个类的对象赋值给另一个同类型的对象。
...
分类:
编程语言 时间:
2014-08-16 21:07:53
阅读次数:
378
继承类的范围,构造函数和拷贝控制
当用派生类执行函数的时候,首先会在当前的类里面找
如果找不到就一级一级地往上找。
Name Lookup Happens at Compile Time
class Quote
{
public:
Quote()=default;
Quote(const string &book, double sales_price)...
分类:
编程语言 时间:
2014-07-26 15:29:42
阅读次数:
542
拷贝控制示例
那么接下来尽情欣赏这个案例吧!!!
/**
* 功能:拷贝控制示例
* 时间:2014年7月14日10:57:39
* 作者:cutter_point
*/
#include
#include
#include
#include
using namespace std;
class Folder;
/**
Message类
*/
class Message
{
fr...
分类:
编程语言 时间:
2014-07-14 17:39:36
阅读次数:
293
交换操作
class HasPtr
{
friend void fun2();
friend void swap(HasPtr&, HasPtr&);
public:
// HasPtr()=default;
HasPtr(const string &s=string()):ps(new string(s)), i(0){}
//对ps指向的stri...
分类:
编程语言 时间:
2014-07-14 17:18:06
阅读次数:
314