当前位置: 首页 > news >正文

c++移动构造和赋值的样例

#include <iostream>class MyResource {
public:// 默认构造函数MyResource(size_t size = 0) : m_size(size), m_data(size ? new int[size] : nullptr) {std::cout << "Default constructor called\n";}// 析构函数~MyResource() {delete[] m_data;std::cout << "Destructor called\n";}// 拷贝构造函数MyResource(const MyResource& other) : m_size(other.m_size), m_data(other.m_size ? new int[other.m_size] : nullptr) {std::copy(other.m_data, other.m_data + m_size, m_data);std::cout << "Copy constructor called\n";}// 拷贝赋值运算符MyResource& operator=(const MyResource& other) {if (this == &other)return *this;delete[] m_data;m_size = other.m_size;m_data = other.m_size ? new int[other.m_size] : nullptr;std::copy(other.m_data, other.m_data + other.m_size, m_data);std::cout << "Copy assignment operator called\n";return *this;}// 移动构造函数MyResource(MyResource&& other) noexcept : m_size(other.m_size), m_data(other.m_data) {other.m_size = 0;other.m_data = nullptr;std::cout << "Move constructor called\n";}// 移动赋值运算符MyResource& operator=(MyResource&& other) noexcept {if (this == &other)return *this;delete[] m_data;m_size = other.m_size;m_data = other.m_data;other.m_size = 0;other.m_data = nullptr;std::cout << "Move assignment operator called\n";return *this;}// 获取大小size_t size() const {return m_size;}// 检查数据指针const int* data() const {return m_data;}private:size_t m_size;  // 存储大小int* m_data;    // 指向资源的指针
};int main() {MyResource res1(10);          // 调用默认构造函数MyResource res2 = std::move(res1); // 调用移动构造函数MyResource res3;              // 调用默认构造函数res3 = std::move(res2);     // 调用移动赋值运算符return 0;
}
  • 默认构造函数: 初始化资源(如果有大小)。
  • 析构函数: 释放动态分配的资源。
  • 拷贝构造函数: 深拷贝资源。
  • 拷贝赋值运算符: 先删除已有资源再深拷贝新资源。
  • 移动构造函数: 转移资源所有权,将源对象的资源指针置空。
  • 移动赋值运算符: 先删除已有资源,接着转移新资源的所有权并将源对象的资源指针置空。

相关文章:

c++移动构造和赋值的样例

#include <iostream>class MyResource { public:// 默认构造函数MyResource(size_t size 0) : m_size(size), m_data(size ? new int[size] : nullptr) {std::cout << "Default constructor called\n";}// 析构函数~MyResource() {delete[] m_data;std…...

静态测试---基于WorkList的活跃变量分析

本文主要用于记录在活跃变量分析实验中的报错及解决&#xff0c;涉及静态测试的详细原理内容较少&#xff0c;编译运行底层逻辑偏多。 一、实验要求 1&#xff09;使用llvm基于框架实现一个基于WorkList的活跃变量分析demo。变量在某个程序点有两种状态&#xff0c;live 或 dea…...

Oracle 证书的重要性

随着信息技术的飞速发展&#xff0c;数据库管理已成为企业运营中不可或缺的一部分。Oracle作为全球领先的数据库管理系统提供商&#xff0c;其Oracle Certified Professional&#xff08;OCP&#xff09;认证已成为数据库管理员和开发人员追求的专业认证之一。本文将深入探讨Or…...

【Go专家编程——并发控制——Mutex】

1.Mutex 互斥锁是并发程序中对共享资源进行访问控制的主要手段&#xff0c;对此Go语言提供了Mutex&#xff0c;对外暴露Lock()和Unlock两个方法&#xff0c;分别用于加锁和解锁。 1.1 Mutex的数据结构 源码如下&#xff1a; type Mutex struct{state int32//代表互斥锁的状…...

SRE视角下的DevOps构建之道

引言&#xff1a; 随着数字化时代的飞速发展&#xff0c;软件成为了企业竞争力的核心。为了更高效地交付高质量的软件&#xff0c;DevOps&#xff08;Development和Operations的组合&#xff09;作为一种文化、实践和工具集的集合&#xff0c;逐渐成为了行业内的热门话题。然而…...

小白如何如何理解滑动窗口最大值问题python

文章目录 题目描述思路什么时候弹出元素什么时候加入元素 代码示例和解释 题目描述 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 举例&#xff1a; 输…...

Linux--进程间通信(2)(有名管道)

目录 1.原理 2.创建命名管道 3.使用命名通道实现简单的通信 4.使用创建的命名管道 1.原理 匿名管道没有名称&#xff0c;它们是通过句柄在父进程和子进程之间传递的。这意味着匿名管道只能用于具有父子关系的进程之间。 但如果程序之间没关系&#xff0c;那么这时候就要用…...

window自动启动bat文件

开机自动开启远程桌面&#xff0c; WinR 执行netplwiz 命令进入设置&#xff1b;取消勾选&#xff0c;可选择所需用户&#xff0c;点击应用&#xff0c;输入远程的密码即可 开机自动开启远程桌面&#xff0c; WinR 执行netplwiz 命令进入设置&#xff1b;取消勾选&#xff0…...

2024年蓝桥杯Web开发【大赛大纲】15届

一、 组别 Web应用开发分为&#xff1a;大学组和职业院校组。 每位选手只能申请参加其中一个组别的竞赛。各个组别单独评奖。 研究生和本科生只能报大学组。 其它高职高专院校可自行选择报任意组别。 二. 竞赛赛程 省赛时长&#xff1a;4小时。 决赛时长&#xff1a;4小…...

【vue-cli搭建vue项目的过程2.x】

vue-cli搭建vue项目 vue-cli搭建vue项目安装node安装vue-cli脚手架并创建项目安装 Ant Design Vue或element-ui(笔者使用Ant-design-vue组件&#xff0c;并全局引入)开发安装三方库包1、Package.json文件---引入如下package.json文件执行npm i或npm install命令即可下载如下依赖…...

Android 生成正式版密钥库 KeyStore

步骤1&#xff1a;打开生成正式版密钥库设置 点击 Build 菜单&#xff0c;选择 Generate Signed App Bundle or APK&#xff1a; 这是打开后的样子&#xff1a; 步骤2&#xff1a;选择 APK Android App Bundle 是用于上架 Google Play 商店的。 正常情况下选择 APK。 选择…...

POLARDB:新零售用户MySQL上云最佳选择

什么是云数据库POLARDB&#xff1f; POLARDB是阿里云自主研发的最新一代RDS关系型数据库&#xff0c;是特别针对互联网场景设计的Cloud-Native 云原生数据库。POLARDB for MySQL版本&#xff0c;在提供100%兼容MySQL5.6/8.0的关系型事务处理ACID特性之上&#xff0c;能够提供完…...

PHP MySQL图解学习指南:开启Web开发新篇章

PHP曾经是最流行的Web开发语言&#xff0c;许多世界领先的网站(如Facebook、维基百科和WordPress)都是用它编写的。PHP运行在Web服务器端&#xff0c;通过使用存储在MySQL数据库中的数据&#xff0c;使得网站可以为每一位访问者显示不同的定制页面。书中采用简单、直观的图示化…...

uniapp一些问题解决

1.按钮边框如何去除&#xff1f; 参考博主&#xff1a;微信小程序按钮去不掉边框_微信小程序button去掉边框-CSDN博客文章浏览阅读1k次。最近在学uni-app&#xff0c;顺便自己写个小程序。左上角放了个button&#xff0c;可边框怎么也去不掉…原来微信小程序的按钮要去掉边框要…...

数字经济讲师培训师教授唐兴通谈新质生产力数字化转型高质量发展AI人工智能大模型大数据经信委大数据管理局

什么是数字经济&#xff1f; 数字经济是指通过数字技术将个人、企业、设备、数据和运营连接起来而产生的经济活动。它涵盖了互联网、移动技术、大数据和信息通信技术等多个行业和技术之间的在线连接和交易。 数字经济不同于传统经济&#xff0c;因为它依赖数字技术、在线交易…...

关于APM32F407配置串口DMA收发没有数据的问题记录

一.问题环境 ​ 整活了一套APM32F407的板子&#xff0c;用了APM32F4xx_SDK_V1.4的标准外设库&#xff0c;正在搭建移植底层BSP框架串口部分&#xff0c;BSP底层配置逻辑是从STM32F407移植过来的。DMA发送时才使能通道及配置外设地址及缓存大小。 ​ 串口1DMA配置过程如下&…...

基于python实现的深度学习web多格式纠错系统

基于python实现的深度学习web多格式纠错系统 开发语言:Python 数据库&#xff1a;MySQL所用到的知识&#xff1a;Django框架工具&#xff1a;pycharm、Navicat、Maven 系统功能实现 用户登录 登录功能是本系统一个非常重要的功能&#xff0c;这极大的保护了系统的安全。登录…...

UE5文件操作

首先在虚幻引擎中创建UMyBlueprintFunctionLibrary类&#xff0c;可以在该类中写我们重复利用的功能&#xff0c;并且这些功能不依赖于特定的游戏对象&#xff0c;方便全局调用。 1.文件的读取和写入 UFUNCTION(BlueprintCallable, Category "File")static bool lo…...

element plus 去掉select选择框的边框,并修改右侧图标

1.去掉选择框边框 ::v-deep .el-select__wrapper{ box-shadow: none; } ::v-deep .is-hovering{ box-shadow: none !important; }2.修改选择框右侧图标 新建CaretBottom.vue文件内容&#xff1a; <template><el-icon><CaretBottom /></el-icon> <…...

Ceph KernelFuse GetSet Quota

Kernel fuse set示例...

ARL灯塔扫不出指纹?手把手教你用Python脚本批量导入指纹库,提升资产识别准确率

ARL灯塔指纹识别优化实战&#xff1a;Python脚本批量导入与精准率提升指南 资产侦察灯塔&#xff08;ARL&#xff09;作为渗透测试领域的重要工具&#xff0c;其核心价值在于准确识别目标资产的技术特征。然而许多中级用户发现&#xff0c;默认指纹库在面对特定行业或新型资产…...

一文了解嵌入式硬件通信核心:串口/CAN/以太网,底层逻辑居然全一样!

做嵌入式、工控、硬件通信开发久了&#xff0c;总会有一个突然顿悟的瞬间&#xff1a;串口、以太网、CAN、TCP、USB、蓝牙、Modbus……这些看似毫无关联、应用场景天差地别的通信方式&#xff0c;扒开底层逻辑才发现&#xff0c;居然是同一个模子刻出来的。看透这一点后&#x…...

GIL移除≠自动线程安全!揭秘Python 3.13+中asyncio+shared_memory+numpy.ndarray三者交汇处的5个未公开竞态漏洞

第一章&#xff1a;Python无锁GIL环境下的并发安全本质重构当Python脱离CPython解释器的全局解释器锁&#xff08;GIL&#xff09;约束——例如在PyPy的STM模式、Jython、Cython多线程扩展&#xff0c;或新兴的Rust-Python绑定&#xff08;如PyO3 async-std&#xff09;中运行…...

GG3M 项目贝叶斯更新与决策数学的具体落地应用

GG3M贝叶斯决策体系&#xff1a;基于贾子公理的跨领域反熵增智慧决策应用摘要&#xff1a; GG3M项目以贾子公理体系为底层支撑&#xff0c;独创“事实层-模型层-元模型层”层级化贝叶斯架构&#xff0c;实现了从参数优化到认知框架迭代的范式突破。该体系以系统长期反熵增演化为…...

LangChain + AgentRun 浏览器沙箱极简集成指南

AgentRun Browser Sandbox 介绍 什么是 Browser Sandbox? Browser Sandbox 是 AgentRun 平台提供的云原生无头浏览器沙箱服务,基于阿里云函数计算&#xff08;FC&#xff09;构建。它为智能体提供了一个安全隔离的浏览器执行环境,支持通过标准的 Chrome DevTools Protocol (…...

免费开源:如何用LiteDB.Studio高效管理嵌入式数据库?

免费开源&#xff1a;如何用LiteDB.Studio高效管理嵌入式数据库&#xff1f; 【免费下载链接】LiteDB.Studio A GUI tool for viewing and editing documents for LiteDB v5 项目地址: https://gitcode.com/gh_mirrors/li/LiteDB.Studio 在嵌入式数据库管理领域&#xf…...

如何高效使用猫抓插件:浏览器资源嗅探实用指南

如何高效使用猫抓插件&#xff1a;浏览器资源嗅探实用指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化时代&#xff0c;我们每天浏览网…...

PasteMD效果展示:3秒将ChatGPT对话转换为规范技术报告

PasteMD效果展示&#xff1a;3秒将ChatGPT对话转换为规范技术报告 1. 为什么你需要这个工具 你有没有过这样的经历&#xff1a;在ChatGPT里反复调试出一段完美的技术方案&#xff0c;复制粘贴到Word文档时却变成一团乱码&#xff1f;公式显示成一串LaTeX代码&#xff0c;表格错…...

8款实用AI论文生成工具(包括爱毕业aibiye)及新手详细指南

在学术研究领域&#xff0c;AI技术的应用显著提升了论文写作的效率与质量。以下推荐8款功能强大的智能工具&#xff0c;涵盖文献解析、内容生成、文本优化等关键环节&#xff0c;助力研究者高效完成从资料收集到论文润色的全流程工作。这些创新解决方案能够有效简化研究过程&am…...

猫抓插件:资源嗅探技术如何重塑浏览器媒体捕获体验

猫抓插件&#xff1a;资源嗅探技术如何重塑浏览器媒体捕获体验 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容爆炸的时代&#xff0c;网…...