它应该执行此操作,除非没有多余的构造:
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
一起使用。