可以取消对共享指针的引用,像这样分配和分配新对象吗?
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");
}
答案 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());
}