我正在尝试将我的数组调整为更大的数组,但是当我尝试这样做时,我会为我的类调用复制构造函数。由于某种原因,它为传递的参数提供了错误的值。任何帮助,将不胜感激。
// ---------------------------------------------------------------------------
// Copy
// Copy constructor for class Array
IntSet::IntSet(const IntSet &init) {
cout << "IN COPY CONSTRUCTOR FOR: " << init << endl;
size = init.size;
count = init.count;
arr = new bool[size];
for (int i = 0; i < size; i++) {
arr[i] = init.arr[i];
}
}
bool IntSet::insert(int value) {
if(check(value)) {
cout << "START OF INSERT: " << *this << " VALUE: " << value << endl;
if(value >= size) {
cout << "INSIDE IF " << endl;
size = value + 1;
IntSet(*this);
}
cout << "AFTER VALUE >= SIZE " << *this << endl;
arr[value] = true;
count++;
cout << " AFTER ADDING: " << *this << " COUNT: " << count << endl;
return true;
}
return false;
}
我在整个代码中编写了调试打印,这里是一个片段。
A = {}
Enter ints for set A:
9
START OF INSERT: {} VALUE: 9
INSIDE IF
IN COPY CONSTRUCTOR FOR: { 2 4 5 9}
IN DESTRUCTOR!!! FOR { 2 4 5 9}
AFTER VALUE >= SIZE { 2 4 5 9}
AFTER ADDING: { 2 4 5 9} COUNT: 1
2
START OF INSERT: { 2 4 5 9} VALUE: 2
AFTER VALUE >= SIZE { 2 4 5 9}
AFTER ADDING: { 2 4 5 9} COUNT: 2
1
START OF INSERT: { 2 4 5 9} VALUE: 1
AFTER VALUE >= SIZE { 2 4 5 9}
AFTER ADDING: { 1 2 4 5 9} COUNT: 3
-1
A = { 1 2 4 5 9}
IN DESTRUCTOR!!! FOR {}
IN DESTRUCTOR!!! FOR { 1 2 4 5 9}
编辑:为了解释这个程序的作用,它是一个试图在bools数组中存储int的程序。
答案 0 :(得分:1)
IntSet(*this);
此行不符合您的要求。它正在做的是创建一个临时的IntSet,然后立即销毁。您不能使用这样的复制构造函数来更改this
表示的当前对象。您需要手动更改字段。或者,作为替代方案,查找副本和交换习语。