Я пытаюсь изменить размер массива на более крупный, но когда я пытаюсь сделать это, я вызываю конструктор копирования для своего класса. По какой-то причине он дает неправильные значения для переданных параметров. Любая помощь будет оценена по достоинству.
// ---------------------------------------------------------------------------
// 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}
EDIT: Чтобы немного объяснить, что делает эта программа, это программа, которая пытается хранить int в массивах bools.
IntSet(*this);
Эта строка не делает то, что вы хотите. То, что он делает, создает временный IntSet, который затем немедленно уничтожается. Вы не можете использовать конструктор копирования, как это, чтобы изменить текущий объект, представленный this
. Вам нужно будет изменить поля вручную. Или, в качестве альтернативы, посмотрите на идиому копирования и обмена.
bool *temp = new bool[size]; for (int i = 0; i < size; i++) { if(arr[i]) { temp[i] = true; count++; } } arr = temp; }
но не работает.