class a
{
private:
std::shared_ptr <std::string> sptr;
public:
void set(std::string & ref)
{
sptr = &ref; //error
}
};
解决方案是什么?我需要将引用保留为参数,并且我需要将私有指针设为 shared_ptr。
class a
{
private:
std::shared_ptr <std::string> sptr;
public:
void set(std::string & ref)
{
sptr = &ref; //error
}
};
解决方案是什么?我需要将引用保留为参数,并且我需要将私有指针设为 shared_ptr。
要将新的原始指针分配给共享指针并使共享指针取得所有权,请使用成员函数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);
如果要存储参考地址,则可以使用
sptr = std::shared_ptr<std::string>(&ref, [](const std::string*){});
否则,如果您想存储新对象 - 使用 Kerrek SB 变体。