Для моего задания домашней работы мне нужно создать объединенный список. У меня есть конструктор копирования и оператор присваивания перегружен, но может показаться, что оператор + перегружен. У меня есть определенный деструктор, который очищает список.Перегрузка оператора + с помощью односвязного списка
List List::operator+(const List &add)
{
List result;
result += *this;
result += add;
return result;
}
+ = работает. Кроме того, когда я делаю что-то вроде следующего: Список list3 = list1 + list2; Это работает. Кажется, что деструктор вызывается непосредственно перед возвратом, так что я ничего не получаю за List3 если я
List list3;
list3 = list1 + list2;
Вот конструктор копирования, перегрузки назначение, и + = перегрузка
List& List::operator=(const List &assign)
{
Node *traverse = assign.head;
int x;
int *passX = &x;
while (traverse != nullptr)
{
x = traverse->getItem();
this->Insert(passX);
traverse = traverse->getNext();
}
return *this;
}
List342& List342::operator+=(const List342 &add)
{
Node *traverse = add.head;
int x;
int *passX = &x;
while (traverse != nullptr)
{
x = traverse->getItem();
this->Insert(passX);
traverse = traverse->getNext();
}
return *this;
}
List342::List342(const List342 ©)
{
*this = copy;
}
struct Node
{
int item;
Node *next = nullptr;
int getItem() const;
Node* getNext() const;
void setItem(const int &val);
void setNext(Node* nodePtr);
};
Node *head;
int itemCount;
Последние part - это структура для узла, а две переменные - любой объект этого класса.
Благодаря
Вы подчиняетесь [правилу из трех] (http://en.cppreference.com/w/cpp/language/rule_of_three)? Фактически скопируйте * список * или только указатель (и)? –
почтовый код, который воспроизводит проблему ... –
«+» отлично выглядит. Если копирование выполняется, проблема заключается в операторе присваивания. – molbdnilo