将 unique_ptr 传递给函数后如何使用它?
How to use a unique_ptr after passing it to a function?
我刚开始学习新的 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;
会导致段错误,这是应该的。我明白为什么会这样。但我也想知道是否有办法取回所有权。我希望能够在将值传递给函数后使用它。
如果您不想转移所拥有对象的所有权,则不要将 unique_ptr
传递给该函数。相反,将引用或原始指针传递给函数(在现代 C++ 风格中,原始指针通常被理解为 non-owning)。在您只想读取对象的情况下,const 引用通常是合适的:
void print(const std::string&);
// ...
print(*s);
我刚开始学习新的 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;
会导致段错误,这是应该的。我明白为什么会这样。但我也想知道是否有办法取回所有权。我希望能够在将值传递给函数后使用它。
如果您不想转移所拥有对象的所有权,则不要将 unique_ptr
传递给该函数。相反,将引用或原始指针传递给函数(在现代 C++ 风格中,原始指针通常被理解为 non-owning)。在您只想读取对象的情况下,const 引用通常是合适的:
void print(const std::string&);
// ...
print(*s);