将std :: shared_ptr设置为指向引用

时间:2013-02-22 12:47:08

标签: c++ pointers c++11 reference shared-ptr

class a
{
private:
  std::shared_ptr <std::string> sptr;
public:
  void set(std::string & ref)
  {
   sptr = &ref; //error
  }
};

解决方案是什么?我需要保持引用作为参数,我需要私有指针为shared_ptr。

2 个答案:

答案 0 :(得分:7)

要为共享指针分配新的原始指针并使共享指针获得所有权,请使用成员函数reset

std::shared_ptr<Foo> p;

p.reset(new Foo);

共享指针共享对象的所有权,因此几乎不可能在任意引用上明智地拥有sptr份额所有权。 (例如sptr.reset(&ref)几乎肯定是完全错误的。)适当的做法是制作一个新的字符串副本,即sptr.reset(new std::string(ref))或更好:

sptr = std::make_shared<std::string>(ref);

答案 1 :(得分:2)

如果您想存储参考地址,可以使用

sptr = std::shared_ptr<std::string>(&ref, [](const std::string*){});

否则,如果要存储新对象 - 请使用Kerrek SB变体。