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