返回对象时清除C ++动态数组

时间:2011-12-08 11:52:16

标签: c++ templates dynamic-arrays multiset

我正在尝试实现一个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 个答案:

答案 0 :(得分:2)

您需要为Bag类编写复制构造函数。看起来你正在获得默认的构造函数,它只是你的类的浅表副本。这就是cardinality成员可以正常但你的动态数组没有的原因。当operator+函数返回Bag对象时,将调用复制构造函数。