我正试图为我的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我不明白为什么调用无参数构造函数(我并不是要创建一个新的对象),也不明白为什么它既不改变当前的对象,也不创建新的对象。编译器防止省略无参数构造函数。
发布于 2015-12-18 13:59:54
您忘记了如何在C++ - 成员初始化程序列表中初始化类成员。
Holder(Item const& someitem) : someitem(someitem) {}在您的代码中,someitem是默认构造的(在执行进入构造函数的{}块之前),然后使用赋值操作符。
没有调用复制构造函数(而且它不能在已经构造的对象上)。
https://stackoverflow.com/questions/34357345
复制相似问题