如何在将唯一的_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;
会导致segfault,如它所应。我知道为什么会发生。但是我也想知道是否有一种方法可以恢复所有权。我希望将值传递给函数后使用值。
如果您不想传输拥有对象的所有权,则不要将unique_ptr
传递给该功能。取而代之的是,将参考或原始指针传递给该功能(在现代C 样式中,通常将原始指针理解为非持有(。在您只想读取对象的情况下,常量参考通常是适当的:
void print(const std::string&);
// ...
print(*s);
相关文章:
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 视觉 C++编译器在计算其参数之前是否允许将函数 ptr 存储在寄存器中?
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误
- 通过成员函数将唯一 ptr 的向量附加到另一个向量
- 如何将函数 ptr 分配给函数 ptrs 数组(Arduino C++)
- 带智能ptr的Pimpl-为什么需要构造函数/析构函数
- 如何将shared_ptr传递给裸 ptr 函数
- 将 lamba 隐式转换为函数 ptr 以创建类
- c++在没有虚拟析构函数的多态性中共享ptr
- 如何调用传递的函数(函数 ptr 作为参数传递给函数)
- OpenCL enqueueWriteImage no const void* ptr 在包装器中C++但在 C 函数中
- 正在从DLL获取函数PTR
- 从虚拟成员函数ptr中进行类型推导(bug?)
- 为什么这个显式析构函数会导致共享ptr中的内存损坏
- 如何访问受保护的基类函数,从派生类通过基类ptr
- openv Ptr类.指针对象在调用函数后被删除
- 函数PTR转换为带模板参数的函数
- 删除从函数返回的唯一ptr
- 具有基类唯一ptr的类的复制构造函数