C ++标准是否具有用于优雅处理新放置的实用程序?

时间:2019-05-31 13:02:28

标签: c++ c++14 placement-new

我写这件事是为了确保始终以正确的方式销毁带有新放置的“分配”的事物。但这似乎是某人会出于对标准库的无知而写的东西。是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)...);
}

0 个答案:

没有答案