< /th>
< /th>
Код: Выделить всё
std::make_unique✓
✓
✓
< /tr>
Код: Выделить всё
std::make_unique✗
✗ < /strong> < /td>
< /tr>
Код: Выделить всё
std::shared_ptr ✓
✓
✓
Почему std :: make_unique > () deleted?
Код: Выделить всё
std::make_unique()обходной путь, который работает в C ++ 14,-это определение функции, подобной:
Код: Выделить всё
#include
#include
#include
template
constexpr bool is_bounded_array_v = false;
template
constexpr bool is_bounded_array_v = true;
template
std::enable_if_t
make_unique()
{
return std::unique_ptr(reinterpret_cast(new std::remove_extent_t[std::extent::value]()));
}
std :: default_delete появляется для работы, вызывая оператор «Удалить» [] на одном и том же адресу, возвращаемом новым [] . Удалить [] ).
Если это неопределенное поведение, если не используется DeleTer, который вызывает DELETE [] на Определенный тип указателя , который возвращается новым [] выше, тогда это можно использовать:
Подробнее здесь: https://stackoverflow.com/questions/797 ... ded-arrays
Мобильная версия