gpt4 book ai didi

c++ - 使类不可复制 : Private undefined methods vs Deleted methods

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:04 25 4
gpt4 key购买 nike

在 C++11 之前,我看到这样的代码:

class Car {
public:
Car() {}
private:
Car(const Car&);
Car& operator=(const Car&);
};

对于 C++11(及更高版本),我看到这样的代码:

class Car {
public:
Car() {}
private:
Car(const Car&) = delete;
Car& operator=(const Car&) = delete;
};

它们的行为是否相同?如果不是,请解释。

引用:https://ariya.io/2015/01/c-class-and-preventing-object-copy

最佳答案

它们在大多数方面相似,但在其他方面有所不同。

考虑以下试图复制类对象的外部代码:

int main() {
Car c;
Car other{c};
}

这两个版本都会导致上面的代码失败。不过,在这一点上,开发人员会查看界面以了解原因。对于 delete 版本,很明显 Car 不是要复制的。对于 private 版本,(至少没有注释),有人怀疑复制构造函数是否可能被意外放置在 private 部分。

现在考虑尝试复制类对象的成员代码:

void Car::foo() {
Car c;
Car other{c};
}

delete 版本像以前一样失败。 private 版本是链接错误。这引发了更大的疑问——忘记定义已声明的方法并不少见。也许这就是这里发生的事情? delete版本没有这个问题。

编辑 Scott Meyers 在 Effective Modern C++ 的第 11 项中对此进行了讨论优先删除函数而不是私有(private)未定义的函数

关于c++ - 使类不可复制 : Private undefined methods vs Deleted methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39888012/

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