微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 initializer_list 参数的情况下如何调用 std::make_shared?

如何解决在 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 举报,一经查实,本站将立刻删除。