如何解决在 initializer_list 参数的情况下如何调用 std::make_shared?
我试图在我的程序中使用 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
并保持代码紧凑(避免初始化列表的显式类型)?
解决方法
它不会编译是有道理的。 struct A 不接受初始化列表。并且没有可用的隐式转换。
您可以执行以下操作:std::make_shared<AA>(std::vector<int>{ 1 });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。