我有一个名为OrderedList的模板类,该模板类采用原始数据类型并将其从最小到最大排列为列表。我试图重载加法运算符,以允许将两个列表合并到一个OrderedList中。我希望该方法返回一个新的OrderedList对象,但出现错误
这是我的OrderedList +运算符方法的代码。我尚未测试此方法中的逻辑,因此我假设存在一些错误。我现在只是想让+运算符合并数组并返回一个新对象
template<class mytype>
OrderedList<mytype>& OrderedList<mytype>::operator+ (const OrderedList<mytype>& a)
{
int size = a.size() + count;
int i=0, j=0, k=0;
OrderedList<mytype> *newList = new OrderedList<mytype>(size);
while (i < a.size() && j < count) {
if (a[i] <= list[j]) {
newList[k] = a[i];
i++;
} else {
newList[k] = list[j];
j++;
}
k++;
if (i < a.size()) {
for (int p = i; p < a.size(); p++) {
newList[k] = a[p];
k++;
}
} else {
for (int p = j; p < count; p++) {
newList[k] = list[p];
k++;
}
}
}
return newList;
}
最佳答案
正如@ConnorHollis在评论中已经指出的那样,您正在OrderedList
操作符内分配一个新的+
实例。除了由于不同的类型而导致工作不正常以及由于返回引用通常表明调用方不需要关心所有权这是危险的之外,这也是非常意外的。 +
操作符应始终返回一个新对象,该对象将被复制构造。