传递给函数后如何使用unique_ptr?

时间:2019-05-09 22:18:48

标签: c++ unique-ptr

我刚刚开始学习新的C ++内存模型:

#include <string>
#include <iostream>
#include <memory>

void print(unique_ptr<std::string> s) {
        std::cout << *s << " " <<  s->size() << "\n";
}

int main() {
        auto s = std::make_unique<std::string>("Hello");
        print(std::move(s));
        std::cout << *s;
        return 0;
}

现在立即调用cout << *s;会导致段错误。我知道为什么会这样。但是我也想知道是否有办法找回所有权。我希望能够在将值传递给函数后使用它。

1 个答案:

答案 0 :(得分:7)

如果您不想转移拥有的对象的所有权,则不要将unique_ptr传递给函数。而是将引用或原始指针传递给该函数(在现代C ++风格中,原始指针通常被理解为非所有者)。在只想读取对象的情况下,通常使用const引用是合适的:

void print(const std::string&);
// ...
print(*s);