You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

智能指针无法自动转为裸指针?如何修正相关编译错误?

解决智能指针无法传递给裸指针参数的问题

嗨,这个问题其实是C++智能指针的一个设计特性——std::unique_ptr这类智能指针不会隐式转换为裸指针,目的就是为了避免不小心泄露内存所有权,或者产生悬空指针的风险。

要解决你的问题,只需要调用智能指针的get()方法,它会返回智能指针当前管理的裸指针,而且不会转移内存的所有权,正好适配printer这种只需要临时使用指针、不需要接管内存的场景。

修改后的完整代码如下:

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

void printer(int* x) {
    std::cout << "x = " << *x << std::endl; // 注:如果原本想打印指针地址,保留`x`即可;如果想打印值,需要加解引用`*x`
}

int main() {
    auto x = std::make_unique<int>(5);
    printer(x.get()); // 使用get()获取裸指针
    return 0;
}

几个需要注意的点:

  • 不要把get()返回的裸指针长期存储,因为智能指针可能会在任意时刻(比如被重置、销毁)释放内存,导致这个裸指针变成悬空指针。
  • 不管是std::unique_ptr还是std::shared_ptr,都可以用get()方法获取对应的裸指针,逻辑完全一致。
  • 如果你的printer函数需要修改指针指向的内容,get()同样适用,只要确保在使用该指针的期间,智能指针没有被销毁或重置就行。

内容的提问来源于stack exchange,提问作者kzaiwo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:55:13