如何将shared_ptr初始化为一个结构体

3

我有两个结构的定义。

struct ST1               
{                        
  int iVar1;               
  int iVar2;             
  float iVar3;
};

struct ST2
{
 std::shared_ptr<ST1> p_sVar4;
};

ST2 structure2; 

我尝试初始化structure2

structure2.p_sVar4 = new ST1();

但是那是错误的。
如何初始化structure2

1
structure2.p_sVar4 = make_shared<ST1>(); - tkausl
2个回答

4
使用 std::make_shared:
 structure2.p_sVar4 = std::make_shared<ST1>();

(它通常比以下更受欢迎:

structure2.p_sVar4 = std::shared_ptr<ST1>(new ST1)

)


resetmake_shared 有什么区别? - rayallen
1
std::make_shared 更高效,而且能够避免使用裸指针,这也是一个很好的优点。 - user2672165
@user2672165 如何向构造函数传递值? - pooya13
结构体 C { C(int i) : i(i) {} int i; }; auto sp = std::make_shared<C>(12); - user2672165

0
使用 reset
structure2.p_sVar4.reset(new ST1);

重置(reset)是否比make_shared更好? - rayallen
我没有深入研究过,但从我的C++经验来看,我猜两者都不是“更好”的选择。我习惯使用reset,它需要一个已存在的指针,有时更加灵活。 - Photon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接