什么是 C++ 中的拷贝和交换习语?
分配包括两个步骤,分别是消除对象旧状态和为对象构建新状态。析构函数用于第一步骤,拷贝构造函数执行第二步骤。这两者都易于实现。但是,当重载赋值运算符时,实现起来可能会非常困难。拷贝和交换习语是同一个问题的解决方案。
这个习语使用拷贝构造函数构建数据的本地拷贝。然后它使用 swap 函数用新数据交换旧数据。接着使用析构函数析构临时拷贝。最后我们只有新数据的一个拷贝。
所以,拷贝和交换习语需要三样东西——拷贝构造函数、析构函数和 swap 函数。swap 函数是一个非抛出函数,交换类的两个对象,即成员。注意——你不应该使用 std::swap 函数,因为它在内部使用拷贝构造函数和赋值运算符来实现相同的功能。
广告