标签:管理类 语义 顺序 需要 移动赋值运算符 拷贝构造 一个 运行时 算法
当定义一个类时,我们显式地或隐式地指定在此类型的对象拷贝、移动、赋值和销毁时做什么。一个类通过定义五种特殊的成员函数来控制这些操作。包括:拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符和析构函数。拷贝和移动构造函数定义了当用同类型的另一个对象初始化本对象时做什么。拷贝和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么。析构函数定义了当此类型对象销毁时做什么。我们称这些操作为拷贝控制操作。
在定义任何C++类时,拷贝控制操作都是必要部分。对初学C++的程序员来说,必须定义对象拷贝、移动、赋值或销毁时做什么,这常常令他们感到困惑。这种困扰很复杂,如果我们不显式的定义这些操作,编译器也会为我们定义,但编译器定义的版本的行为可能并非我们所想。
拷贝、赋值与销毁
拷贝构造函数、拷贝赋值运算符和析构函数
拷贝控制和资源管理
确定类型对象的拷贝语义。定义拷贝操作使类的行为看起来像一个值或者像一个指针。
交换操作
除了定义拷贝控制成员,管理资源的类通常还定义一个名为swap的函数。对于那些与重排元素顺序的算法一起使用的类,定义swap是非常重要的。如果一个类定义了自己的swap,那么算法将使用类自定义版本。否则,算法将使用标准库定义的swap。为了交换2个对象我们需要进行一次拷贝和两次赋值。
动态内存管理类
某些类需要在运行时分配可变大小的内存空间。这种类通常可以使用标准库容器来保存他们的数据。某些类需要自己进行内存分配。这些类一般来说必须定义自己的拷贝控制成员来管理所分配的内存。
对象移动
新标准的一个最主要的特性是可以移动而非拷贝对象的能力。某些情况下,对象拷贝后就立即被销毁了,这时,移动而非拷贝对象会大幅度提升性能。
标签:管理类 语义 顺序 需要 移动赋值运算符 拷贝构造 一个 运行时 算法
原文地址:http://www.cnblogs.com/mu-ye/p/7895856.html