【问题标题】:My copy constructor is causing my methods which use my class to fail. Can someone take a look at it and tell me what I am doing incorrectly?我的复制构造函数导致使用我的类的方法失败。有人可以看看它并告诉我我做错了什么吗?
【发布时间】:2012-07-14 08:05:36
【问题描述】:

我的构造函数可以很好地创建一个副本 - 但是当一个方法将 IntegerNumber 作为参数时,它会停止工作。

我的构造函数:

IntegerNumber::IntegerNumber(const IntegerNumber &integerInput){
//Creates a copy of an Integer Number
//Set len and isNegative
len = integerInput.len; 
isNegative = integerInput.isNegative;
//Fill integer with IntegerInput
integer = new char[len+1];
for(int i = 0; i <= len; i++)
    integer[i]=integerInput.integer[i];
}

我的析构函数:

IntegerNumber::~IntegerNumber(){
//Destructs IntegerNumber
delete [] integer;
delete &len;
delete &isNegative;
}

我的班级的数据成员:

private:
    char *integer;
    int len;
    bool isNegative;

请尝试帮助我找出我的构造函数/析构函数可能出现的问题,导致程序停止但不会崩溃或中断?

【问题讨论】:

  • delete &amp;len 看起来非常可疑。你能显示你的类定义吗?
  • 在使用new的地方使用delete[]“版本”相同)
  • @CharlesBailey - lenint
  • 我很好奇,“停止工作”是什么意思,因为它不会崩溃或中断:?
  • 经验法则:每个new 对应一个delete,每个new[] 对应一个delete[]。你的deletes 比news 多。

标签: c++ oop class destructor copy-constructor


【解决方案1】:

你不想要这个:

delete &len;
delete &isNegative;

像这样删除实例变量是未定义的行为,因此您的程序可以停止

【讨论】:

  • 3 小时的调试....终于有人修好了!!!!很抱歉我明天有期中考试,当我的代码无法正常运行时,我几乎沮丧地流下了眼泪。我很生气,我浪费了这么多时间!!但我终于知道了——我不会再犯这个错误了!!谢谢!
【解决方案2】:

始终使用std::unique_ptr 和其他 来管理内存。动态数组特别适合std::vector&lt;T&gt;。不要手动管理你的记忆——你会得到所有的错误。

【讨论】:

  • 我本可以将整个类实现为向量,并且可以肯定的是,它会为我节省很多挫败感。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2020-02-18
相关资源
最近更新 更多