news 2026/2/3 20:32:41

C++中不能复制只能移动的类型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++中不能复制只能移动的类型

在 C++ 中,不能复制(Non-Copyable)但可以移动(Movable)的类型通常是那些用于管理独占性资源的类。

这些类的设计目标是确保在任何给定时间,只有一个对象拥有该资源的所有权,从而防止资源被重复释放或发生混乱。

核心类型:独占性资源管理器

以下是 C++ 标准库中一些最重要、最常见的只能移动不能复制的类型:

1. 内存和资源所有权管理
类型托管的资源为什么不能复制?
std::unique_ptr独占性地管理堆上的动态内存。如果复制,两个指针将指向同一块内存。当其中一个析构时,内存会被释放,另一个指针将变成悬空指针(Dangling Pointer)。
std::fstream/std::ifstream/std::ofstream文件句柄(File Handle)。复制会导致两个对象试图管理同一个操作系统文件描述符,可能导致关闭两次或访问冲突。
std::thread操作系统线程的执行上下文。复制一个线程对象意味着创建两个对象来控制同一个系统线程的生命周期和同步点,这是逻辑上不允许的。
2. 并发和异步工具
类型托管的资源为什么不能复制?
std::mutex互斥锁的底层系统资源。如果复制,两个mutex对象将代表同一个锁,使得锁机制失效,无法保证互斥。
std::lock_guard/std::unique_lockstd::mutex的独占性锁定状态。它们是 RAII 锁,复制会导致两个对象试图同时管理同一个锁,破坏了独占性。
std::promise异步操作结果的共享状态复制将导致两个promise实例可以对同一个共享状态设置结果,这会破坏“单次设置”的规则。
std::packaged_task异步函数和其内部的std::promise它封装了std::promise,因此也必须保证独占所有权,确保任务只被执行一次。
std::future异步操作的获取句柄虽然有些future实现可以复制(如std::shared_future),但默认的std::future通常只能移动,因为它代表了对结果的独占性访问
3. C++20 同步原语
  • std::jthread:C++20 中的 RAII 线程,它自动join,继承了std::thread不可复制的特性。

  • std::counting_semaphore/std::binary_semaphore:信号量的底层资源是独占的。

总结和设计原则

当你设计一个 C++ 类时,如果这个类管理着一个无法安全共享的底层资源(如操作系统句柄、网络套接字、文件描述符、内存块的所有权),那么你应该:

  1. 禁用拷贝构造函数和拷贝赋值运算符(C++11/14/17 通常使用= delete)。

  2. 实现移动构造函数和移动赋值运算符(将底层资源指针/句柄从源对象转移到目标对象,并清空源对象)。

通过这种设计,C++ 编译器强制执行了资源所有权的转移,保证了资源的生命周期安全,这是现代 C++ 编程中一个重要的设计范式。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 0:57:39

【LLM基础教程】LLM训练数据集是如何构造的:从文档到Token Block

本文不讨论模型结构,而只回答一个看似简单、但极其关键的问题: 大语言模型(LLM)训练时,究竟在“吃”什么样的数据?这些数据是如何被构造出来的? ​ 在之前的文章中(【LLM基础教程】从…

作者头像 李华
网站建设 2026/2/2 23:40:12

CosyVoice3 - 跨语言、会方言、懂情绪的智能配音工具 文本转语音 语音克隆 支持50系显卡 一键整合包下载

CosyVoice 3 是阿里巴巴团队推出的一款新一代语音合成模型,它能在没有额外训练的情况下,用多种语言和方言生成自然、富有情感的语音,声音效果接近真人。它的特点是多语言支持、情感表达、方言覆盖和高质量的声音一致性,应用领域包…

作者头像 李华
网站建设 2026/2/3 22:23:14

LobeChat与知识库系统联动:构建智能问答闭环

LobeChat与知识库系统联动:构建智能问答闭环 在企业服务日益智能化的今天,一个常见的痛点浮现出来:员工每天要花大量时间重复回答“报销标准是什么”“合同模板在哪里”这类问题。客服团队面对客户提问时,也常常因为产品更新频繁而…

作者头像 李华
网站建设 2026/2/2 9:22:18

LobeChat新品发布新闻稿撰写

LobeChat新品发布技术深度解析 在AI助手逐渐渗透到日常办公与开发流程的今天,一个核心矛盾日益凸显:用户既想要ChatGPT级别的流畅交互体验,又不愿牺牲对数据和模型的控制权。商业闭源产品虽体验出色,但私有部署难、定制成本高&…

作者头像 李华
网站建设 2026/2/2 23:19:50

9 个高效降AI率工具,自考人必备!

9 个高效降AI率工具,自考人必备! 自考论文降AI率,这些工具你不可不知 随着人工智能技术的不断发展,越来越多的学生在撰写论文时会借助AI工具进行辅助。然而,随之而来的AIGC率过高、查重率偏高问题也成为了自考人面临…

作者头像 李华
网站建设 2026/2/4 2:38:39

大数据与化学:分子模拟计算

大数据与化学:分子模拟计算关键词:大数据技术、分子模拟、化学计算、机器学习势函数、多尺度建模、材料设计、药物研发摘要:本文深入探讨大数据技术与化学分子模拟的融合应用,系统解析分子模拟的核心理论框架(量子力学…

作者头像 李华