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

C++类_移动构造函数

   std::move 的主要用途是在对象所有权转移时,触发移动构造函数或移动赋值运算符,避免不必要的深拷贝,提升性能。
         移动构造函数 和 移动赋值运算符, std::move转换为右值,匹配到移动构造函数和移动赋值运算符。

#include <iostream>
#include <utility>class MyClass {
public:// 构造函数MyClass(size_t size) : size(size), data(new int[size]) {std::cout << "Constructor called" << std::endl;for (size_t i = 0; i < size; ++i) {data[i] = i;}std::cout << data << std::endl;}// 析构函数~MyClass() {delete[] data;}// 拷贝构造函数MyClass(const MyClass& other) : size(other.size), data(new int[other.size]) {std::cout << "Copy constructor called" << std::endl;for (size_t i = 0; i < size; ++i) {data[i] = other.data[i];}}// 拷贝赋值运算符MyClass& operator=(const MyClass& other) {std::cout << "Copy assignment operator called" << std::endl;if (this != &other) {delete[] data;size = other.size;data = new int[size];for (size_t i = 0; i < size; ++i) {data[i] = other.data[i];}}return *this;}// 移动构造函数MyClass(MyClass&& other) noexcept : size(other.size), data(other.data) {std::cout << "Move constructor called" << std::endl;other.size = 0;other.data = nullptr;}// 移动赋值运算符MyClass& operator=(MyClass&& other) noexcept {std::cout << "Move assignment operator called" << std::endl;if (this != &other) {delete[] data;size = other.size;data = other.data;other.size = 0;other.data = nullptr;}return *this;}void printData() const {for (size_t i = 0; i < size; ++i) {std::cout << data[i] << " ";}std::cout << data << std::endl;}private:size_t size;int* data;
};int main() {MyClass obj1(5);// 使用 std::move 调用移动赋值运算符MyClass obj2 = std::move(obj1);obj2.printData();MyClass obj3(std::move(obj2));obj3.printData();return 0;
}    

 // 移动构造函数 MyClass(MyClass&& other)
// 移动赋值运算符 MyClass& operator=(MyClass&& other)
这个两个函数的参数不带const,拷贝构造和拷贝赋值是带const,不能修改成员变量的值。

运行结果:

相关文章:

  • 装饰器@wraps(func)详解
  • MFC自定义控件开发与使用指南
  • (1)大模型的提示词工程实践技巧---LLM输出配置详解
  • 动态功耗与静态功耗
  • WGDI-分析WGD及祖先核型演化的集成工具-文献精读126
  • 【Mytais系列】介绍、核心概念
  • 【自然语言处理与大模型】使用Xtuner进行模型合并与导出
  • Github 2025-05-03 Rust开源项目日报 Top10
  • (即插即用模块-Attention部分) 六十三、(2024 CVPR) MLKA 多尺度大核注意力
  • 我写了一个分析 Linux 平台打开文件描述符跨进程传递的工具
  • 学习黑客网络安全法
  • Docker与WSL2如何清理
  • WebRTC 服务器之Janus架构分析
  • 【JAVA】数组与内存模型:二维数组底层实现(9)
  • 2.2 矩阵
  • NV203NV207SSD固态闪存NV208NV213
  • Maven 实现多模块项目依赖管理
  • neo4j初尝试
  • YOLOv11改进:利用RT-DETR主干网络PPHGNetV2助力轻量化目标检测
  • Excel-CLI:终端中的轻量级Excel查看器
  • 繁荣活跃!“五一”假期全国重点零售和餐饮企业销售额同比增长6.3%
  • 上海今日降雨降温,节后首个工作日气温回升最高可达28℃
  • 铁路上海站迎五一返程客流最高峰,今日预计到达75.9万人次
  • 人民日报和音:引领新时代中俄关系坚毅前行
  • 美国经济萎缩意味着什么?关税政策如何反噬经济?
  • 杭州挂牌临平区两宗住宅用地,起始总价约11.02亿元