Необходимо добавить в шаблонный класс SharedPointer конструктор перемещения, который после перемещения обнуляет указатели у исходного объекта.