2017-08-10 84 views
1

在C++中,如果我从一个函数返回一个共享/唯一的ptr,它是否按值返回?即返回一个共享指针

shared_ptr<CLASS> function_f(){ 
    auto p = make_shared<CLASS>(5); 
    return p; 
} 

那么会发生什么?指针是否被动态分配?如果我返回这个,我有两个指针指向相同的东西吗?

+0

您定义它的方式,'p'不是一个指针。 – ifconfig

+1

'std :: shared_ptr '*** object ***是通过值返回的。 –

回答

3

shared_ptr本身是由价值返回。它指向的CLASS对象是动态分配的,因此不会被复制。

您可能会短暂地将两个shared_ptr设置为同一个对象(RVO除外,因此实际上您可能不会),但通过设计shared_ptr类,这不是问题。

+0

然后当这个方法超出范围时,'p'本身被删除?所以我们只有1的引用计数? – Bana

+0

是的,'p'是函数范围的局部。你显示的代码是'shared_ptr'的正确和习惯用法。 – Thomas