gpt4 book ai didi

c++ - 给定一个 cctor,编译器能否始终安全地创建赋值运算符?

转载 作者:行者123 更新时间:2023-11-30 00:58:14 24 4
gpt4 key购买 nike

我在考虑 swap() 惯用语。

如果我们有一个有效的复制构造函数,为什么编译器不能通过交换“this”指针在幕后生成一个“交换”函数?

我可能把这个看得太简单了,但我想知道为什么它不能完成。

最佳答案

我想它可以,但事实并非如此。构造函数和赋值的默认版本只是逐个成员地构造/赋值。如果您已经需要编写自己的复制构造函数(这显然是一个警告信号,并且应该只在极少数情况下发生),那么您的类正在发生一些不平凡的事情,而且很可能不会做正确的事情。

此外,如果复制构造函数必须手动编写,而不仅仅是成员的复制,那么 swap 函数很可能也是不平凡的,所以你会也必须手动提供。

在C++0x中,你可以使用= default让编译器自动生成构造函数和自动赋值运算符,但那些只会逐个成员地操作,不会使用copy+swap成语。

然而,对于大多数类,您应该为您的成员使用资源管理容器,它们本身实现了所有正确的功能,并且您的类本身应该能够使用默认的复制/移动构造函数和赋值。

编辑。换句话说:Copy/Move+Swap 是您可以选择的惯用法,但它不是递归构建更大的默认方法从较小的类型。没有自动隐含的 swap(这里有一个关于此事的 previous discussion),因为它留给用户的设计选择来实现复制、移动和交换。

关于c++ - 给定一个 cctor,编译器能否始终安全地创建赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6806338/

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