新闻中心

c++中std::unique_ptr如何转移所有权_c++ unique_ptr所有权转移方法

2025-11-03
浏览次数:
返回列表
std::unique_ptr所有权通过std::move转移,不可复制;可移动至另一变量、函数传参或返回、存入容器,转移后原指针为空,确保独占性。

c++中std::unique_ptr如何转移所有权_c++ unique_ptr所有权转移方法

在C++中,std::unique_ptr 是一种独占式智能指针,意味着同一时间只能有一个 unique_ptr 拥有对所管理对象的控制权。由于这种独占性,所有权不能被复制,但可以通过移动语义进行转移。以下是几种常见的所有权转移方式。

使用 std::move 转移所有权

最常用的方法是通过 std::move 将一个 unique_ptr 的所有权转移到另一个变量。

#include <memory>
#include <iostream>

int main() {
    std::unique_ptr<int> ptr1 = std::make_unique<int>(42);
    std::cout << *ptr1 << "\n"; // 输出: 42

    std::unique_ptr<int> ptr2 = std::move(ptr1); // 所有权从 ptr1 转移到 ptr2

    // 此时 ptr1 为空,ptr2 指向原对象
    if (ptr1 == nullptr) {
        std::cout << "ptr1 is now null\n";
    }
    std::cout << *ptr2 << "\n"; // 输出: 42
}

调用 std::move(ptr1) 后,ptr1 不再持有对象,ptr2 成为唯一拥有者。

函数间传递所有权

可以将所有权传入函数或从函数返回。

Musho Musho

AI网页设计Figma插件

Musho 76 查看详情 Musho
  • 传入函数: 接收参数应为右值引用或通过 std::move
  • 返回所有权: 函数可直接返回 unique_ptr,利用移动或返回值优化(RVO)
#include <memory>

void takeOwnership(std::unique_ptr<int> data) {
    std::cout << "Received value: " << *data << "\n";
} // data 在此析构

std::unique_ptr<int> createPtr() {
    return std::make_unique<int>(100);
}

int main() {
    auto ptr = std::make_unique<int>(50);
    takeOwnership(std::move(ptr)); // 转移进函数

    auto newPtr = createPtr(); // 接收返回的所有权
    std::cout << *newPtr << "\n"; // 输出: 100
}

容器中存储 unique_ptr 并转移

可以在容器如 std::vector 中存储 unique_ptr,添加元素时需使用 std::move

#include <vector>
#include <memory>

int main() {
    std::vector<std::unique_ptr<int>> vec;
    auto ptr = std::make_unique<int>(99);

    vec.push_back(std::move(ptr)); // 必须 move,否则编译失败

    std::cout << *vec[0] << "\n"; // 输出: 99
}

基本上就这些。只要记住:unique_ptr 不能复制,只能移动,使用 std::move 显式转移所有权即可。不复杂但容易忽略细节。

以上就是c++++中std::unique_ptr如何转移所有权_c++ unique_ptr所有权转移方法的详细内容,更多请关注其它相关文章!


# 可以通过  # 普洱网站建设维护  # seo账号代运营费用  # 提升网站优化效率的方法  # 浙江营销型网站优化平台  # 海南旅游网站建设报价  # 淇滨区网站建设  # 好的seo平台广告  # 河南企业关键词排名优化  # 农场会员营销网站建设  # 企业网络营销推广排行榜  # 中文网  # ai  # 相关文章  # 独占性  # 转移到  # 在此  # 是一种  # 边缘  # 为空  # 游戏开发  # stream  # ios  # c++ 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问  新三国志曹操传110级星符试炼夏侯渊极难攻略  Node.js中HTML按钮与J*aScript函数交互的正确姿势  抖音网页版快捷访问 抖音网页版网页版入口操作教程  三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】  Lar*el DB::listen 事件中的查询执行时间单位解析  知音漫客正版漫画平台_知音漫客官网账号登录  J*a TimerTask中HashMap意外清空的深层原因与解决方案  小米14应用无法联网原因分析_小米14网络权限修复  火锅吃太多会怎样 火锅吃太多会上火吗  vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法  妖精动漫免费平台 妖精动漫官网资源观看网址  一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】  Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度  怎么在mac上运行html代码_mac运行html代码方法【指南】  “在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  WordPress插件开发:正确注册卸载钩子与避免常见陷阱  outlook中文官网入口地址 outlook官方中文版直达首页链接  AO3最新官网入口公告_2025AO3镜像站实时查询方法  将HTML Canvas内容转换为可上传的图像文件(File对象)  PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践  MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId  NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  Go Martini框架:动态服务解码后的图片内容  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  BetterDiscord插件中安全更新用户简介的实践指南  抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧  如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构  sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置  修复二维数组索引越界异常:一维循环到二维坐标的正确映射  Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】  Lar*el 8 多关键词数据库搜索优化实践  拼多多赚钱渠道_拼多多收益来源  三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升  利用Bokeh CustomJS动态控制DataTable列可见性  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  C#使用XPath查询节点时出错? 常见语法错误与调试技巧  在python-socketio事件处理器中安全访问Flask应用上下文  Typer应用中灵活处理命令行参数的令牌化与解析  cad如何更改注释性对象的比例_cad注释性比例调整方法  b站如何看历史记录_b站观看历史找回方法  快手网页版在线登录 快手网页版官网入口快速访问 

搜索