什么是 C++ 中的拷贝和交换习语?


分配包括两个步骤,分别是消除对象旧状态和为对象构建新状态。析构函数用于第一步骤,拷贝构造函数执行第二步骤。这两者都易于实现。但是,当重载赋值运算符时,实现起来可能会非常困难。拷贝和交换习语是同一个问题的解决方案。

这个习语使用拷贝构造函数构建数据的本地拷贝。然后它使用 swap 函数用新数据交换旧数据。接着使用析构函数析构临时拷贝。最后我们只有新数据的一个拷贝。

所以,拷贝和交换习语需要三样东西——拷贝构造函数、析构函数和 swap 函数。swap 函数是一个非抛出函数,交换类的两个对象,即成员。注意——你不应该使用 std::swap 函数,因为它在内部使用拷贝构造函数和赋值运算符来实现相同的功能。


更新于:23-6-2020

211 次浏览

开启你的职业生涯

完成课程获得认证

立即开始
广告