C ++ динамический массив очищается при возврате объекта - PullRequest
0 голосов
/ 08 декабря 2011

В настоящее время я работаю над заданием (поэтому я не буду публиковать полный код), пытаясь реализовать абстрактный тип данных Bag.

Ниже приведен метод, который я сейчас пытаюсь реализовать:

template <typename T>
Bag<T> Bag<T>::operator+ (const Bag<T>& bag) {
    int sizeofCurrentMultiset = cardinality_;
    int sizeofPassedMultiset  = bag.cardinality_;
    int totalSize = sizeofCurrentMultiset + sizeofPassedMultiset;

    Bag<T> newBag(totalSize);

    for (int i = 0; i < sizeofCurrentMultiset; i++) {
        newBag.insert(array_[i]);
    }

    for (int i = 0; i < sizeofPassedMultiset; i++) {
        newBag.insert(bag.array_[i]);
    }

    return newBag;
}

Я храню элементы в виде динамического массива.

Моя проблема в том, что при возврате новой сумки я могу напечатать штраф мощности (печатает до 4, в исходных сумках было по два элемента в каждой), но динамический массив не содержит чисел (он выводит некоторые случайные числа). цифры, такие как -1789102). Однако, когда я пытаюсь распечатать элементы до того, как сумка будет возвращена, она печатается нормально.

Без сомнения, это будет что-то тривиальное, но я был бы признателен за помощь.

Спасибо.

1 Ответ

2 голосов
/ 08 декабря 2011

Вам нужно написать конструктор копирования для вашего Bag класса. Похоже, вы получаете конструктор по умолчанию, который делает только поверхностную копию вашего класса. Вот почему член cardinality в порядке, а динамический массив - нет. Конструктор копирования вызывается, когда ваша функция operator+ возвращает объект Bag.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...