C ++在复制构造函数中初始化列表赋值并在复制构造函数中崩溃

时间:2017-11-05 01:04:27

标签: c++ constructor initialization copy

我遇到了重新定义初始化列表中定义的值的问题。我想在复制构造函数中重新定义它。我会抛出一些示例代码。我也有一个问题,我的程序一旦进入我的复制构造函数的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());

}

}

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你希望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. 当delcaring成员变量时,我会使用m__前缀来从本地变量中取代。这样您就不必继续使用this,从长远来看可以加快编码速度。
  2. 密切关注您在for循环中使用的临时变量 - 您声明int x = 0,然后在本地范围内obj.tools[i]不存在时使用i
  3. 您可以使用//对代码发表评论,或使用/* comment */围绕评论区。 *****不会注释掉代码。
  4. 如果可能,我会避免将成员变量初始化为nullptr。稍后在尝试操作它们时可能会感到困惑,因为它可能会导致空指针错误。