Я делаю перегрузку бинарного оператора -. Делаю класс очереди. Делаю выражение c = a - b, где a,b,c – объекты класса очереди. У меня есть функция, которая перегружает этот оператор. Внутри неё создаётся вспомогательный объект, в котором хранится искомая разность. Если я возвращаю этот объект, то у меня после конца функции вызовется его деструктор, очистится память, а результат этого всего запишется в c. Более того, потом ещё вызовется деструктор класса c, и он ещё раз очистит ту же самую память и вылетит ошибка. Как в таких случаях можно поступать? Если использовать this, то у меня изменится объект a, чего происходить не должно. Хотелось бы просто записать результат в c.
class Queue
{
private:
struct elem
{
elem *next, *prev;
int info;
};
elem *head, *tail;
int len;
public:
//конструктор
Queue(double inf)
{
head = new elem;
tail = new elem;
len = 1;
head->info = inf;
};
Queue()
{
head = NULL;
tail = NULL;
len = 0;
}
//деструктор
~Queue()
{
elem *n = tail;
while (tail != NULL)
{
n = tail;
tail = tail->next;
len--;
delete n;
n = NULL;
}
};
...
};
Queue operator-(Queue a)
{
elem* n1 = head;
Queue answ;
//создание копии
for (int i = 0; i < len; i++)
{
answ.enqueue(n1->info);
n1 = n1->prev;
}
...
return answ;
}