У меня возникла проблема с std :: swap. Мне нужно поменять объект. Этот объект освобождает память в своем деструкторе. Я написал конструктор перемещения и оператор назначения перемещения, который копирует указатель на эту память. По умолчанию конструктор устанавливает указатель на NULL.Нежелательный вызов деструктора в std :: swap
Конечно, у меня есть обычный конструктор и оператор присваивания, но они выделяют и копируют память, что явно не то, что я хочу для моей операции свопинга.
Когда я вызываю std :: swap, он создает временный объект из _Left, используя мой конструктор перемещения. Затем он использует мой оператор назначения перемещения для перемещения _Right в _Left, и, наконец, он перемещает объект temp в _Right.
Все это выглядит хорошо, когда вы попадаете на дно std :: swap. Однако, когда вы выходите из нижней части, деструктор для временного объекта запускается, освобождая память, которую ожидает объект _Right.
Каков нормальный приемлемый способ сделать это? Я надеялся избежать необходимости писать функции обмена, поскольку это точка перемещения конструкторов/перенос операторов присваивания. Должен ли я использовать свой собственный своп(), чтобы избежать этого?
Показать свою реализацию. – Jarod42
Показывая нам, что реализация специальных функций с помощью специального перехода была бы намного проще, чем написать несколько абзацев о проблеме. Во всяком случае, похоже, что вы не устанавливаете указатель в исходном объекте на «nullptr» после перехода от него. – Praetorian