Потому что не может быть выведено. Язык не знает, что означает разрушение вашего int*
. Может быть, вам нужно заняться другими делами по дому.
На самом деле, если вы пишете конструктор перемещения, у вас обычно будет другая домашняя работа, потому что, если все, что вы делаете, это delete
динамическая память, вы должны были использовать умный указатель и вообще не нужно будет писать свой собственный конструктор перемещения.
Кроме того, вы повторяете логику в своем коде. Вы можете «повторно использовать деструктор», избегая этих уловок в конструкторе и присваивателе перемещений, просто заменяя указатели вместо этого и позволяя деструктору объекта move-from делать то, что он обычно делает, когда придет время:
Foo::Foo(Foo&& other)
: data(nullptr)
{
*this = std::move(other);
}
Foo& Foo::operator=(Foo&& other)
{
std::swap(this->data, other.data);
return *this;
};
(Отказ от ответственности: вероятно, есть более идиоматический способ сделать это, что я не могу вспомнить, но вы понимаете.)
Теперь там гораздо меньше шаблонов. Таким образом, вы можете видеть, что даже если , если для вас выведенные на язык конструкторы перемещения, это вообще не будет включать деструктор.