При назначении перемещения произойдет ли утечка памяти, если уничтожение оставлено для значения? - PullRequest
2 голосов
/ 16 марта 2011

В отношении этой статьи MSDN , в конце (Раздел: Надежное программирование) говорится,

Чтобы предотвратить утечку ресурсов, всегда бесплатно ресурсы (такие как память, файл ручки и розетки) в движении оператор присваивания.

Что произойдет, если вместо этого будет выполнено задание на перемещение:

MemoryBlock& operator=(MemoryBlock&& other)
{
   if (this != &other)
   {
      std::swap(_data, other._data);
      std::swap(_length, other._length);
   }
   return *this;
}

Разве "_data" rvalue освобождает "другие" ссылки, когда оно выходит из области видимости?

1 Ответ

1 голос
/ 16 марта 2011

Да, other._data будет освобожден, когда выйдет из области видимости (конечно, при условии хорошего деструктора). Однако есть один пункт для рассмотрения: если other._data относится к ресурсу, который нуждается в своевременном уничтожении, он может быть уничтожен позднее в этом проекте. Примером может служить заблокированное состояние мьютекса.

...