解引用共享指针并分配给它

时间:2018-06-29 02:41:30

标签: c++ shared-ptr dereference

可以取消对共享指针的引用,像这样分配和分配新对象吗?

void foo()
{
    std::shared_ptr<std::string> x =
            std::make_shared<std::string>();

    bar(*x); // is this fine?
    // x == bsl::string("WHATEVER")
}

void bar(string& y)
{
    y = string("whatever");
}

2 个答案:

答案 0 :(得分:2)

是的,这是有效的。 Operator *返回解引用已存储(原始)指针的结果。

取消引用(原始)指针不会产生复制或返回临时值:dereferencing a pointer when passing by reference

答案 1 :(得分:0)

可以做到这一点,但是我会使用shared_ptr::get()运算符,以便对我们没有使用原始指针这一事实更加清楚。

void foo()
{
    std::shared_ptr<std::string> sharedPtr = std::make_shared<std::string>();
    bar(*sharedPtr.get());
}