我可以将std :: make_shared与没有参数构造函数的结构一起使用吗?

时间:2015-08-17 12:39:48

标签: c++ shared-ptr

说我有struct这样:

struct S
{
int i;
double d;
std::string s;
};

我可以这样做吗?

std::make_shared<S>(1, 2.1, "Hello")

1 个答案:

答案 0 :(得分:9)

不,你不能,你必须定义自己的构造函数才能做到这一点。

#include <iostream>
#include <memory>
#include <string>

struct S
{
    S(int ii, double dd)
    : i(ii)
    , d(dd)
    { }
  int i;
  double d;
};

int main()
{
 // S s{1, 2.1};
  auto s = std::make_shared<S>(1, 2.1);
  //or without constructor, you have to create manually a temporary
  auto s1 = std::make_shared<S>(S{1, 2.1});

}