是否有类似std :: emplace_shared <T>的东西?

时间:2019-10-02 05:40:16

标签: c++ std

它应该执行此操作,除非没有多余的构造:

template<typename T, typename ...Args>
std::shared_ptr<T> emplace_shared(Args&&... args) {
    std::shared_ptr<T> p = std::make_shared<T>();
    *p = T{std::forward<Args>(args)...};
    return p;
}

struct A {
    int a;
    float b;
    std::string c;
};

void main() {
    std::shared_ptr<A> p = emplace_shared<A>(1, 2.0f, "3");
}

想法是它可以像A{1, 2.0f, "3"}一样使用,但可以与shared_ptr一起使用。

0 个答案:

没有答案