Нет, вы не можете переназначить this
. Аналогия была бы, если бы я подошел к вам и сказал: «Ты теперь это тело там». Ваш ответ будет «это даже не имеет смысла». И ты был бы прав. То, что вы хотите сделать, это изменить состояние текущего объекта, не заменяя его полностью.
Кроме того, здесь нет никаких причин для размещения динамических объектов. Не делай этого. Это делает ваш код более медленным и более подверженным ошибкам. На самом деле, ваш интерфейс не кажется, нужно указатели на всех
void node::merge_sort()
{
if (head == NULL || head->next == NULL)
{
return;
}
node left, right;
divide(left, right);
left.merge_sort();
right.merge_sort();
*this = merge_lists(left, right); //this line is the key to answering to your question
}
А затем изменить подписи функций из:
void node::divide(node** left, node** right);
node merge_lists(node* left, node* right);
node& node::operator=(const node& right_hand_side);
в
void node::divide(node& left, node& right);
node merge_lists(node& left, node* right);
node& node::operator=(const node& right_hand_side);
node& node::operator=(node&& right_hand_side); //along with this line
Клавиши здесь *this =
, который переназначает значение, удерживаемое текущим объектом, вместо того, чтобы пытаться заменить существование текущего объекта. Кроме того, оператор присваивания переходов, чтобы сделать его быстрым.
Нужны ли настоящие указатели? Даже если они есть, «новый» - нет. – chris
Назначение 'this' не будет работать! Создайте функцию 'merge_sort()' как статический член класса или вне класса 'node'. –
@chris Да, они необходимы для хранения адреса двух половинок и изменения их в функции разделения. – zed111