【发布时间】:2021-09-14 23:23:42
【问题描述】:
我试图在我的程序中使用std::make_shared 来构建堆上的对象,而不是new,但是当对象构造函数带有初始化列表时,简单的替换不起作用,我必须手动指定确切的类型:
#include <vector>
#include <memory>
struct A
{
A( std::vector<int> ) {}
};
int main()
{
std::shared_ptr<A> p{ new A({1}) }; //Ok
// std::shared_ptr<A> q = std::make_shared<A>({1}); //Compiler error
std::shared_ptr<A> q = std::make_shared<A>(std::initializer_list<int>{1}); // Ok, but too wordy
}
有没有办法在这种情况下使用std::make_shared 并保持代码紧凑(避免显式类型的初始化列表)?
【问题讨论】:
-
这能回答你的问题吗? std::shared_ptr and initializer lists
-
我想知道为什么
make_shared没有以initializer_list<T>作为第一个参数的额外重载,例如the constructor ofstd::optional(#7) 确实如此。
标签: c++ initializer-list make-shared