Конструктор копирования C ++ принимает неправильные значения

0

Я пытаюсь изменить размер массива на более крупный, но когда я пытаюсь сделать это, я вызываю конструктор копирования для своего класса. По какой-то причине он дает неправильные значения для переданных параметров. Любая помощь будет оценена по достоинству.

    // ---------------------------------------------------------------------------
    // 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.

Теги:
copy
constructor
parameters

1 ответ

1

IntSet(*this);

Эта строка не делает то, что вы хотите. То, что он делает, создает временный IntSet, который затем немедленно уничтожается. Вы не можете использовать конструктор копирования, как это, чтобы изменить текущий объект, представленный this. Вам нужно будет изменить поля вручную. Или, в качестве альтернативы, посмотрите на идиому копирования и обмена.

  • 0
    Уже попробовал: я сделал это bool *temp = new bool[size]; for (int i = 0; i < size; i++) { if(arr[i]) { temp[i] = true; count++; } } arr = temp; } но не работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню