无法打印std::unique_ptr存储的地址,operator<<不匹配编译报错如何解决
报错原因
C++标准库没有为std::unique_ptr类型重载std::ostream的<<输出运算符,因此直接将unique_ptr对象作为<<的右操作数输出时,编译器找不到匹配的运算符实现,触发该报错。
标准库没有提供这个重载是有意为之的设计:unique_ptr的核心作用是自动管理动态内存的生命周期,直接暴露隐式转换为原始指针的逻辑容易引发开发者误操作原始指针,进而出现内存安全问题,因此要求开发者显式获取其管理的原始指针。
解决方法
调用unique_ptr的get()成员方法获取它存储的原始指针,再输出该指针即可:
#include<iostream> #include<string> #include<memory> using namespace std; int main() { unique_ptr<int>unPtr1 = make_unique<int>(25); cout << unPtr1.get() << endl;// 修改后第8行 cout << *unPtr1 <<endl; system("pause>nul"); return 0; }
get()方法仅返回unique_ptr管理的原始指针副本,不会转移指针的所有权,unique_ptr仍然会在作用域结束时自动释放对应内存,不会产生内存安全问题。
内容的提问来源于stack exchange,提问作者Pratyaksh Sinha
相关产品推荐
相关产品推荐

