簡體   English   中英

C ++在復制構造函數中初始化列表分配,並在復制構造函數中崩潰

[英]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();
}

另外一些編碼技巧:

  1. 當處理成員變量時,我將使用m__前綴來區分局部變量。 這樣,您就不必繼續使用this ,從長遠來看,它可以加快編碼速度。
  2. 請關注什么溫度veriables您在使用for循環-你宣布int x = 0 ,然后用obj.tools[i]i不會在局部范圍存在。
  3. 您可以使用//注釋代碼,或在注釋塊周圍加上/* comment */ *****不會注釋掉代碼。
  4. 如果可能的話,我將避免將成員變量初始化為nullptr 稍后嘗試操縱它們時,這可能會引起混淆,因為它可能會導致空指針錯誤。

暫無
暫無

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

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