LINUX.ORG.RU

unique_ptr и malloc

 


0

3

Знатокам потрохов STL (желательно, в разных реализациях)

Насколько безопасно использовать (2) вместо (1)? Как мне кажется полностью безопасно.

char* api_malloc(size_t Size)
{
    //dummy, external API
    return reinterpret_cast<char*>(malloc(Size));
}

int main()
{
    //1
    auto pArray = std::unique_ptr<char[], decltype(&free)>{ api_malloc(20), &free };
    //2
    auto pScalar = std::unique_ptr<char, decltype(&free)>{ api_malloc(20), &free };

    return 0;
}

Абсолютно.

Deleted
()
Ответ на: комментарий от CatsCantFly

Получаю char* из API, в документации написано, что надо освобождать через free, при этом работать удобнее как с одним указателем а не как с массивом

Uter
() автор топика

У char нет деструктора, поэтому второй вариант с семантикой указателя более правильный.

Dendy ★★★★★
()

Первый вариант потенциально опасный, т.к. фактически делаешь new char, а дефолтный деструктор к нему будет delete[].

mashina ★★★★★
()

Да вообще пофигу, потому что deleter ты указал один и тот же, он и вызовется. Квадратные скобочки в этом случае влияют только на интерфейс, используемый до удаления.

const86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.