簡體   English   中英

如何制作構造函數的深層副本

[英]How to make a deep copy of a constructor

我有以下構造函數:

在 HPP 文件中

Card(string name, int mana_cost, CardType type);

在 CPP 文件中

Oop::Card::Card(string name, int mana_cost, CardType type)
                : name_(name), mana_cost_(mana_cost), type_(type)
{

}

並想制作上面那個的復制構造函數,我試過了

  Card( const Card &b)
  {
    name_ = new std::string();
    *name_ = *b.name_;
    mana_cost_ = new int();
    type_ = new CardType();
  }

但無濟於事

我怎么能做一個復制構造函數

提前致謝

您的轉換構造函數不會new class 成員,因此您的復制構造函數也不需要new它們。 只需以與轉換構造函數相同的方式初始化復制構造函數中的成員,只需使用從傳遞的Card object 獲取的輸入值,例如:

Oop::Card::Card(const Card &b)
    : name_(b.name_), mana_cost_(b.mana_cost_), type_(b.type_)
{
}

在 C++11 及更高版本中,您甚至可以將一個構造函數委托給另一個構造函數:

Oop::Card::Card(const Card &b)
    : Card(b.name_, b.mana_cost_, b.type_)
{
}

或者,最簡單的解決方案是default復制構造函數並讓編譯器為您處理復制,因為您的成員使用支持正確復制語義的類型:

class Card {
public:
    Card(string name, int mana_cost, CardType type);
    Card(const Card &) = default; // <--
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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