作业包括2个步骤,分别是撕裂对象的旧状态和为其建立新状态。第一步使用析构函数,第二步使用复制构造函数。两者的实现都很简单。但是当重载赋值运算符时,实现起来可能会变得非常困难。复制和交换习惯是相同的解决方案。
这个习惯用法使用copy-constructor来构建数据的本地副本。然后,使用交换功能将旧数据与新数据交换。然后使用析构函数将临时副本破坏。我们最终只有新数据的副本。
因此,复制和交换习语需要三样东西-复制构造函数,析构函数和交换函数。交换函数是一种非抛出函数,它交换一个类的两个对象即成员。注意-您不得使用std::swap函数,因为它在内部使用复制构造函数和赋值运算符来实现相同功能。