首页 > 其他分享 >拷贝构造函数 和 移动构造函数的 浅拷贝

拷贝构造函数 和 移动构造函数的 浅拷贝

时间:2023-07-19 12:55:43浏览次数:36  
标签:obj1 other MyClass 拷贝 移动 data 构造函数

class MyClass {
public:
    int* data;

    // 默认构造函数
    MyClass() : data(nullptr) {}

    // 拷贝构造函数(浅拷贝)
    MyClass(const MyClass& other) : data(other.data) {}

    // 移动构造函数(浅拷贝)
    MyClass(MyClass&& other) noexcept : data(other.data) {
        other.data = nullptr; // 将原始对象的指针置为空,避免悬挂指针
    }

    // 析构函数
    ~MyClass() {
        delete data;
    }
};

int main() {
    // 创建对象1
    MyClass obj1;
    obj1.data = new int(42);

    // 使用拷贝构造函数创建对象2
    MyClass obj2 = obj1;

    // 使用移动构造函数创建对象3
    MyClass obj3 = std::move(obj1);

    // 输出对象2和对象3的data值
    std::cout << "obj2.data: " << *obj2.data << std::endl;
    std::cout << "obj3.data: " << *obj3.data << std::endl;

    // 释放资源
    delete obj2.data;    
    //delete obj3.data;    多次释放内存会报错

    return 0;
}

  //由于是浅拷贝,obj2 和 obj3 的 data 成员变量指向同一块内存,因此释放资源时需要注意避免重复释放。

标签:obj1,other,MyClass,拷贝,移动,data,构造函数
From: https://www.cnblogs.com/susiesnai-sun/p/17565282.html

相关文章

  • 《C++》拷贝和替换算法
    copy复制容器元素到新容器 vector<int>v3; v3.resize(v1.size()); copy(v1.begin(),v1.end(),v3.begin());replace元素值替换 replace(v3.begin(),v3.end(),0,100);//replace(开始,结束,旧值,新值);replace_if条件元素值替换classFindCondition{public: booloperator()(......
  • 伪负载均衡(拷贝多个流程
    数厂代码,未实现伪负载均衡//伪负载均衡/*;(()=>{letnodes=JSON.parse(JSON.stringify(data.nodes));letedges=JSON.parse(JSON.stringify(data.edges));//排查特殊节点并记录letstart_node=null,......
  • 深拷贝函数
    1functiondeepClone(oldData){2if(typeofoldData==='object'&&oldData!==null){3letres=Array.isArray(oldData)?[]:{}4for(letkinoldData){5......
  • python脚本,把整个文件夹移动至指定位置并对文件夹重新命名
    Python脚本-移动和重命名文件夹概述在本文中,我将介绍如何使用Python编写一个脚本,将整个文件夹移动到指定位置并对文件夹进行重新命名。这个脚本适用于那些刚入行的开发者,帮助他们理解如何使用Python处理文件和文件夹。步骤下面是完成这个任务的步骤列表:步骤代码说明......
  • postcss-px-to-viewport 插件移动端适配
    1.简介:postcss-px-to-viewport是一个将px单位转换为视口单位的(vw,vh,vmin,vmax)的PostCSS插件。将CSS中的px单位转化为vw,来进行移动端适配,1vw等于1/100视口宽度。2.地址:postcss-px-to-viewportGitHub地址3.安装:npmnpminstallpostcss-px-to-viewport--save-......
  • 文件内指针的移动 、内数据的修改 、函数(次函数非数学中的函数)(非常重要)
    文件的操作模式"""1.如果是t模式,read里面写的数字代表的是读取的字符个数2.如果是b模式,read里面写的数字代表的是读取的字节个数3.一个字节代表一个英文字符4.一个中文字符使用三个字节保存"""#withopen('a.txt','r',encoding='utf8')asf:#......
  • APP加固:助力移动应用安全合规
    近日,工业和信息化部发布了2023年第2批侵害用户权益行为的App(SDK)名单,55款App因涉及强制、频繁、过度索取权限等问题而被通报。这一举措进一步凸显了合规对于APP发展的重要性。根据工业和信息化部的通报,被通报的这些App存在着一些消费者难以察觉的问题,如频繁自启动和关联启动、超范......
  • 零拷贝
     所谓零拷贝并不是不需要拷贝,而是减少不必要的拷贝次数。通常是说在IO读写过程中。目前市面上大部分的高性能软件,比如Nginx、Kafka等等,都有零拷贝的身影。我们通过一个传统IO读取文件,然后通过网络发送的例子来入手,详情看下图: 由上图可知,在一个简单的文件读取发送的过程中,......
  • uni-app http.js 请求封装(构造函数版本)
    import{getToken,removeToken}from"./auth.js"importconfigfrom'./config.js'//默认配置constDEFAULT_CONFIG={baseUrl:process.env.NODE_ENV==='development'?config.url_qa_api:config.url_online_api,//这里是自定......
  • 2023-07-16:讲一讲Kafka与RocketMQ中零拷贝技术的运用?
    2023-07-16:讲一讲Kafka与RocketMQ中零拷贝技术的运用?答案2023-07-16:什么是零拷贝?零拷贝(英语:Zero-copy)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。➢零拷贝技术可以减少数据......