Есть ли в стандарте C ++ какие-либо утилиты для элегантной обработки размещения? - PullRequest
1 голос
/ 31 мая 2019

Я написал эту вещь, чтобы убедиться, что вещи, «распределенные» с размещением новых, всегда уничтожались правильным образом.Но это похоже на то, что кто-то написал бы по незнанию стандартной библиотеки.Есть ли лучший способ сделать это, который является частью стандартной библиотеки C ++?

template <typename T, typename... Args>
auto make_placement_unique(T *p, Args... args)
{
    using ::std::unique_ptr;
    using ::std::forward;
    auto deleter = [](T *p) {
        p->T::~T();
    };
    return unique_ptr<T, decltype(deleter)>{
        new (p) T{forward<Args>(args)...},
        deleter
    };
}

template <typename T, typename... Args>
auto make_placement_unique(void *p, Args... args)
{
    using ::std::forward;
    return make_placement_unique(reinterpret_cast<T *>(p), forward<Args>(args)...);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...