[英]C++ initialize list assignment in copy constructor and crashing in copy constructor
我遇到一種情況,無法重新定義初始化列表中定義的值。 我想在復制構造函數中重新定義它。 我將丟棄一些示例代碼。 我還遇到一個問題,即程序進入復制構造函數的for循環后會崩潰。 看到那里有什么瘋狂的事情嗎? 似乎沒有崩潰就不會使其脫離for循環。
在頭文件中:
class Calculator : public Tool {
private:
int numberKeys;
Tool** tools;
public:
Calculator();
Calculator(const Calculator& obj);
在CPP文件中:
Calculator::Calculator()
:Tool("MyCalculator"),
numberKeys(0),
tools(nullptr)
{
}
Calculator::Calculator(const Calculator& obj )
{
numberKeys=obj.numberKeys;
tools = new Tool*[numberKeys];
*****How do I define :Tool("MyCalculator"),
*****to :Tool("YourCalculator"),
for (int x = 0; x < numberKeys; x++){
this->tools[x] = (obj.tools[i]->clone());
}
}
如果我正確理解您的問題,則希望Calculator
的默認構造函數和復制構造函數將不同的字符串傳遞給父(基)類。
為此,請使用與默認構造函數相同的分配列表格式。 因此,復制構造函數的定義如下所示:
Calculator::Calculator(const Calculator& obj)
: Tool("YourCalculator"), numberKeys(obj.numberKeys) {
tools = new Tool*[numberKeys];
for (int i = 0; i < numberKeys; i++) tools[i] = obj.tools[i]->clone();
}
另外一些編碼技巧:
m_
或_
前綴來區分局部變量。 這樣,您就不必繼續使用this
,從長遠來看,它可以加快編碼速度。 int x = 0
,然后用obj.tools[i]
當i
不會在局部范圍存在。 //
注釋代碼,或在注釋塊周圍加上/* comment */
。 *****
不會注釋掉代碼。 nullptr
。 稍后嘗試操縱它們時,這可能會引起混淆,因為它可能會導致空指針錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.