gpt4 book ai didi

c++ - 复制交换 idom : what if I change the class members?

转载 作者:搜寻专家 更新时间:2023-10-31 00:28:55 24 4
gpt4 key购买 nike

我有课

class MyClass
{
public :
int a;
int b;
}

为了使用复制交换惯用语,我创建了函数

void MyClass::swap(MyClass& other)
{
std::swap(a,other.a);
std::swap(b,other.b);
}

如果稍后我更改我的类并删除成员 a,那么编译器会在 swap 函数中报错,这没问题。

但是如果我添加一个新成员,我的swap函数就不再正确了。我该怎么做才能不忘记将新成员添加到交换功能?

最佳答案

问题是您的答案不是 copy-and-swap 成语。实际的 copy-and-swap 习语是为类编写复制构造函数和移动操作。后者将通过 std::swap 为您提供高效的交换操作。然后你通过调用你的类复制构造函数来创建一个本地拷贝来编写你的复制分配。然后将 *this 与临时文件交换。你不会一个一个地做。

不要忘记的最好方法就是不编写任何特殊成员函数,让编译器为您生成它们。这称为零规则。大多数类不需要编写这些方法,而只需选择(或编写)成员以使生成的方法正确。添加成员时没有额外维护的原因之一。

最后,如果你正在写一个资源管理类,而且是手写这些函数,你不一定要使用copy和swap。 copy-and-swap 基本上以性能换取强大的异常安全性。我几乎从未使用过强大的异常安全性,而且在许多领域,以这种方式编写内容是不切实际的。所以只在需要时使用它。

关于c++ - 复制交换 idom : what if I change the class members?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43303070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com