首页 > 其他分享 >18、拷贝构造、赋值构造、移动构造的简洁代码实现

18、拷贝构造、赋值构造、移动构造的简洁代码实现

时间:2024-01-25 14:56:45浏览次数:18  
标签:std capacity cout 18 构造 buff 赋值

class Buffer
{
public:
    explicit Buffer(int capacity) : capacity_(capacity), len_(0), buff_(new char[capacity] {0})
    {
        std::cout << "默认的构造函数" << std::endl;
    };
    ~Buffer() {};

    Buffer(const Buffer& other) noexcept 
        : capacity_(other.capacity_), len_(other.len_), buff_(capacity_ ? new char[capacity_] {0} : nullptr)
    {
        if (capacity_)
        {
            std::copy(other.buff_, other.buff_ + other.capacity_, this->buff_);
        }
        std::cout << "拷贝构造" << std::endl;
    }

    Buffer& operator=(Buffer other) noexcept     // 
    {
        std::cout << "赋值拷贝" << std::endl;
        Swap(*this, other);
        return *this;
    }

    Buffer(Buffer&& other) noexcept: capacity_(0), len_(0), buff_(nullptr)
    {
        Swap(*this, other);
        std::cout << "移动构造" << std::endl;
    }

    static void Swap(Buffer& lns, Buffer& rhs) noexcept
    {
        std::swap(lns.buff_, rhs.buff_);
        std::swap(lns.capacity_, rhs.capacity_);
        std::swap(lns.len_, rhs.len_);
    }


private:
    int capacity_;
    int len_;
    char* buff_;

};

 

标签:std,capacity,cout,18,构造,buff,赋值
From: https://www.cnblogs.com/zwj-199306231519/p/17987149

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (186)-- 算法导论14.1 3题
    三、用go语言,写出OS-SELECT的非递归版本。文心一言:下面是使用Go语言编写的OS-SELECT的非递归版本:funcOS_SELECT(T*Node,kint)*Node{//找到最小秩的节点minRankNode:=findMinRankNode(T)//如果最小秩的节点就是目标节点,则返回该节点if......
  • 从CF1819A学习mex相关问题及assert调试宏
    Problem-1819A-Codeforces快速计算mexintcalcMex(vector<int>v){ sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()) intn=int(v.size());for(inti=0;i<n;++i)if(v[i]!=i)returni;returnn;}<cass......
  • C语言基础-复合赋值和递增递减-day4
    一、复合赋值total+=(sum+100)/2;total=total+(sum+100)/2;total*=sum+12;total=total*(sum+12);自右向左结合#include<stdio.h>intmain(){inttotal=0;intsum=0;total+=(sum+100)/2;printf("total+=(sum+100)/2=......
  • 为啥赋值他就报错JSONDecodeError?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python解析的问题。问题如下:大佬们谁有时间帮忙看下这个情况 好奇怪哦 为啥赋值他就报错JSONDecodeError:Expectingvalue:line1column1(char0)load是load文件,loads才是数据。......
  • CF-1184-E3-最小生成树+倍增+并查集
    1184-E3题目大意给定一个\(n\)个点,\(m\)条边的无向图,边带权。对于每条边,你需要找到最大值\(x\),使得把这条边的权值修改为\(x\)后能够出现在最小生成树上。Solution先把整个图的最小生成树弄出来,然后将边分为树边以及非树边来考虑:非树边:对于一个非树边连接了\(x\)和\(y\)的......
  • Python 变量?对象?引用?赋值?一个例子解释清楚
    哈喽大家好,我是咸鱼。前天有个小伙伴找到我,给了我一段python代码:a=[1,2]a[1]=aprint(a[1])然后问我为什么结果是[1,[...]],我一看这个问题有意思,我说三言两语解释不清楚,我写篇文章到时候你看下吧,于是有了今天这篇文章。在正式开始之前,让我们先弄清楚一些概念。对......
  • P8664 [蓝桥杯 2018 省 A] 付账问题
    贪心,把钱最多的放在后面兜底,前面的能付多少付多少#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<math.h>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;constintN=5e5+5;int......
  • 并查集与反集——P1892团伙
    并查集并查集如其名,合并与查找查找intfind(intkey){ if(fa[key]==key)returnkey; elsereturnfa[key]=find(fa[key]);}合并voidunite(intx,inty){ intfax=find(x); intfay=find(y); fa[fax]=fay; return;}反集处理并查集合并问题的敌对/......
  • 四电极智能体脂秤方案芯片CSU18M91
    现在的年轻人爱健身,十分关注身材、形体,减肥、健身成了生活日常;中老年人则关注健康指数、有无病症,实时把握身体情况。现在一台体脂称通过测试体重、体脂、BMI、水分等数据并给出相应提示,并且许多人都将体脂检测数据作为身体健康指数衡量标准,辅助用户来关注身体健康,同时可以通过......
  • 四电极智能体脂秤方案芯片CSU18M91
    现在的年轻人爱健身,十分关注身材、形体,减肥、健身成了生活日常;中老年人则关注健康指数、有无病症,实时把握身体情况。现在一台体脂称通过测试体重、体脂、BMI、水分等数据并给出相应提示,并且许多人都将体脂检测数据作为身体健康指数衡量标准,辅助用户来关注身体健康,同时可以通过蓝牙......