C++ 如何获取对已共享\u ptr的对象的引用?
如何获取对具有C++ 如何获取对已共享\u ptr的对象的引用?,c++,shared-ptr,C++,Shared Ptr,如何获取对具有共享\ptr的对象的引用?(对于简单类T)已返回引用: T& ref = *ptr; 或者,我想我可以举一个更有意义的例子: void doSomething(std::vector<int>& v) { v.push_back(3); } auto p = std::make_shared<std::vector<int>>(); //This: doSomething(*p); //Is just as val
共享\ptr
的对象的引用?(对于简单类T
)已返回引用:
T& ref = *ptr;
或者,我想我可以举一个更有意义的例子:
void doSomething(std::vector<int>& v)
{
v.push_back(3);
}
auto p = std::make_shared<std::vector<int>>();
//This:
doSomething(*p);
//Is just as valid as this:
vector<int> v;
doSomething(v);
void doSomething(标准::向量&v)
{
v、 推回(3);
}
自动p=std::使_共享();
//这:
剂量测定(*p);
//与此一样有效:
向量v;
剂量测定法(v);
(请注意,使用引用已释放对象的引用当然是无效的。保留对对象的引用与保留共享\u ptr实例的效果不同。如果共享\u ptr实例的计数降至0,则无论有多少引用正在引用该对象,该对象都将被释放。)即使在小示例中,也最好使用好的样式:
auto p=std::make_shared()代码>@GManNickG是的,可能是真的。将在一秒钟内编辑。(实际上,我不确定我是否通常会在这里使用auto
。使用shared\u ptr似乎更清晰。虽然我总共编写了大约200行C++11代码,但我不太熟悉C++11的良好实践/习惯用法。)是否有共享引用的概念?(这样,当ref在作用域中时,计数器不会达到0)?@Corbin:这里的指导原则是,您不希望通过两次指定类型来浪费时间(或引入bug)。现在您只指定了一次。(此外,出于其他可搜索的原因,这会稍微好一点。)@GManNickG啊,我想这是有道理的。将不得不重新训练我的大脑,以注意类型的变量声明的右侧:)。谢谢