当前位置: 首页 > 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,不能修改成员变量的值。

运行结果:

http://www.xdnf.cn/news/270955.html

相关文章:

  • <init-param>和<load-on-startup>的作用
  • 重新构想E-E-A-T:提升销售与搜索可见性的SEO策略
  • 如何优化MySQL主从复制的性能?
  • 【电路笔记】-自耦变压器
  • c++ 函数参数传递
  • 推理能力:五一模型大放送
  • 硬件零基础入门(尚硅谷)
  • JavaScript中的AES加密与解密:原理、代码与实战
  • Day04 新增套餐
  • 双指针算法详解(含力扣和蓝桥杯例题)
  • 王道考研数据结构课后题代码题(2026版)——排序部分
  • 第5章 Python 基本数据类型详解(int, float, bool, str)
  • 融智学16字方针无歧义表述并构建人机协同的非零和博弈模型
  • systemd-notify(linux服务状态通知消息)
  • 视频编解码学习一之相关学科
  • Java框架“若依RuoYi”前后端分离部署
  • 2025年最新嵌入式开发STM32单片机详细教程(更新中)
  • GTS-400 系列运动控制器板(十四)----软限位使用
  • 多元随机变量协方差矩阵
  • 62常用控件_QDial的使用
  • Learning vtkjs之PolyDataNormals
  • Spring MVC注解式控制器开发
  • 计算方法实验五 插值多项式的求法
  • java 洛谷题单【算法2-2】常见优化技巧
  • 纯Java实现STDIO通信的MCP Server与客户端验证
  • 【Java】2025 年 Java 学习路线:从入门到精通
  • 【进阶】C# 委托(Delegate)知识点总结归纳
  • Spring事务管理
  • [计算机网络]数据链路层
  • 1993年地级市民国铁路开通数据(地级市工具变量)