Что делает release и какова его роль?

Я новичок в с++, занимаюсь умными указателями и наткнулся на метод, о котором ничего понять не могу, release

Есть некий unique_ptr в стиле с(с free/malooc/realloc) в который надо прочитать из файлового потока данные.

std::unique_ptr<char[], decltype(std::free) *> arr(static_cast<char *>(malloc(size)), std::free);  


while(fin)
  {
    fin.read(&arr[count], size);
    count += fin.gcount();

    if(fin.gcount() == size)
    {
      overSize += size;
      std::unique_ptr<char[], decltype(std::free) *> temp(static_cast<char *>(realloc(arr.get(), overSize)), std::free);
      arr.release();
      std::swap(arr, temp);
    }
  }

То есть, некий размер массива изначальный, а потом с помощью realloc переалоцируем массив, если количество символов в файле больше начального размера и так несколько раз. Не очень понятна роль release(), то есть, когда писал reset() все крашелось, c просто move не работает. Прошу рассказать, что делает release и какова его роль


Ответы (1 шт):

Автор решения: Mikhailo

release возвращает указатель, который хранится в unique_ptr, и убирает его из unique_ptr - при этом не освобождая память!

Без этого вы пытались освободить старую память - что никак не соответствует семантике realloc, который сам эту память освобождает (или не меняет указатель, что приводит к ничуть не лучшему поведению).

Так что очень советую послушать Harry - все С++ные штучки заточены под С++ные способы работы.

→ Ссылка