如何在将唯一的_ptr传递给函数后使用

How to use a unique_ptr after passing it to a function?

本文关键字:函数 ptr 唯一      更新时间:2023-10-16

我刚刚开始学习新的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;会导致segfault,如它所应。我知道为什么会发生。但是我也想知道是否有一种方法可以恢复所有权。我希望将值传递给函数后使用值。

如果您不想传输拥有对象的所有权,则不要将unique_ptr传递给该功能。取而代之的是,将参考或原始指针传递给该功能(在现代C 样式中,通常将原始指针理解为非持有(。在您只想读取对象的情况下,常量参考通常是适当的:

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