11

如何获得对拥有shared_ptr<T>它的对象的引用?(对于一个简单的类T

4

2 回答 2

14

operator*已经返回一个参考:

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);

(请注意,使用引用已释放对象的引用当然是无效的。保留对对象的引用与保留 shared_ptr 实例的效果不同。如果 shared_ptr 实例的计数降至 0,则该对象无论有多少引用引用它,都将被释放。)

于 2012-11-27T00:58:42.377 回答
0

有没有共享参考的概念?

实际上是的!shared_ptr提供了一个“别名构造函数”,可以完全用于此目的。它返回一个shared_ptr使用与输入相同的引用计数shared_ptr但指向不同的引用,通常是从支持数据派生的字段或值。

ptr只要这个 shared_ptr 存在,程序员就有责任确保它保持有效,例如在典型的用例中,ptr它是由管理的对象的成员r或别名(例如,向下转换)r.get()

shared_ptr 的别名构造函数是干什么用的?更详细地介绍了这一点,包括如何使用它的示例。

于 2022-01-13T00:42:29.427 回答