我以以下课程为例:
#include <iostream>
class MyClass {
private:
double value{0};
public:
explicit MyClass(double value) : value(value){};
MyClass(const MyClass&) = delete;
MyClass(MyClass&&) = delete;
MyClass& operator=(MyClass&&) = delete;
double getValue(){return value;}
};
int main(void){
MyClass c1(100.0); // Version 1
MyClass c2 = MyClass(200.0); // Version 2
std::cout << c1.getValue() << std::endl;
std::cout << c2.getValue() << std::endl;
}
我了解到// Version 1
中的// Version 2
是更可取的,因为// Version 2
调用了复制构造函数。
这就是为什么我删除了复制构造函数,而// Version 2
仍然有效的原因。因此,不会调用任何副本构造函数。
哪个MyClass运算符由// Version 2
调用?
为什么// Version 1
比// Version 2
更可取?