Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取对已共享\u ptr的对象的引用?_C++_Shared Ptr - Fatal编程技术网

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啊,我想这是有道理的。将不得不重新训练我的大脑,以注意类型的变量声明的右侧:)。谢谢