std::allocate_unique

Андрей Марцинкевич
Андрей Марцинкевич

В общем мы имеем std::make_unique, но почему то не имеем std::allocate_unique для работы с кастомными аллокаторами. Ибо инициализировать сейчас unique_ptr для кастомного аллокатора довольно не тривиально (выделить память, вызвать конструктор, написать правильно custom_deleter). Поэтому и предлагаю вынести всю эту работу в std::allocate_unique. Думаю добавить его в STL особо не составит труда.

Пример использования:

CustomAlloc<CustomStruct> alloc;
auto up = std::allocate_unique<int>(alloc, customArg);

//вместо

CustomAlloc<CustomStruct>  alloc;

auto newObj = new (alloc.allocate(1)) TestStruct,

auto dealloc = [alloc = std::move(alloc)](CustomStruct* obj)
{
  obj->~CustomStruct(); 
  alloc.deallocate(obj, 1);
};


auto up = std::unique_ptr<TestStruct, decltype(dealloc)>(newObj, dealloc);

 

12
рейтинг
2 комментария
Павел Корозевцев

не нужен ли подобный механизм сразу и для shared?

Павел Корозевцев
Андрей Марцинкевич

Павел Корозевцев, есть std::allocate_shared

 

Андрей Марцинкевич
Обновлено 
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения