簡體   English   中英

C ++調用默認構造函數而不是復制構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM