[英]C++ calls default constructor instead of copy constructor
我正在尝试为我的Arduino编写一个程序,但我不理解将Item
对象传递给另一个Holder
对象时发生的事情。 我构建了一个简单的例子:
class Item {
public:
int property;
Item() {
Serial.println("parameterless constructor called");
this->property = 2;
}
Item(int property) {
this->property = property;
Serial.println("right constructor called");
}
};
class Holder {
public:
Item someitem;
Holder(Item& someitem) {
this->someitem = someitem;
}
};
void setup() {
Serial.begin(9600);
Item someitem = Item(1);
Serial.println(someitem.property);
Holder hold = Holder(someitem);
Serial.println(hold.someitem.property);
}
void loop() {
}
控制台上的输出是:
right constructor called
1
parameterless constructor called
1
我不明白为什么首先调用无参数构造函数(我没有根据我的理解创建一个新对象),以及为什么它既不会改变当前对象也不会创建一个新对象。 编译器阻止了无参数构造函数。
你忘了我们如何在C ++中初始化类成员 - 成员初始化列表 :
Holder(Item const& someitem) : someitem(someitem) {}
在你的代码中, someitem
是默认构造的(在执行进入构造函数的{}
块之前),然后你使用赋值运算符。
不调用复制构造函数(并且它不能在已构造的对象上)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.