08C++11右值引用

#pragma once
#pragma execution_character_set("utf-8")

#include <iostream>

using namespace std;

class Reference
{
public:
    Reference()
    {
        cout << "Reference()..." << endl;
        m_data = new int(100);
        cout << "m_data:" << m_data << "  *m_data:" << *m_data << endl;
    }

    ~Reference()
    {
        cout << "~Reference()..." << endl;
        delete m_data;
        m_data = nullptr;
    }

    Reference(const Reference& rf)
    {
        cout << "Reference(const Reference& rf)..." << endl;
        m_data = new int(*rf.m_data);
        cout << "m_data:" << m_data << "  *m_data:" << *m_data << endl;
    }

    Reference& operator=(const Reference& rf)
    {
        cout << "Reference operator=(const Reference& rf)" << endl;
        if (&rf != this)
        {
            delete m_data;
            m_data = nullptr;

            m_data = new int(*rf.m_data);
        }
        cout << "m_data:" << m_data << "  *m_data:" << *m_data << endl;
        return *this;
    }

    Reference(Reference&& rrf)
    {
        cout << "Reference(Reference&& rrf)..." << endl;
        m_data = rrf.m_data;
        rrf.m_data = nullptr;
        cout << "m_data:" << m_data << "  *m_data:" << *m_data << endl;
    }

    Reference& operator=(Reference&& rrf)
    {
        cout << "Reference& operator=(Reference&& rrf)..." << endl;
        if (&rrf != this)
        {
            delete m_data;
            m_data = nullptr;

            m_data = rrf.m_data;
            rrf.m_data = nullptr;
        }
        cout << "m_data:" << m_data << "  *m_data:" << *m_data << endl;
        return *this;
    }
private:
    //右值引用主要用于处理包含堆内存等资源的对象拷贝
    int* m_data;

};
//右值引用
int main()
{
    //构造
    Reference rf;
    //拷贝构造
    Reference rf1(rf);
    //右值引用拷贝构造
    Reference rf2(std::move(rf));

    //构造
    Reference rff;
    //=赋值运算符
    Reference rf11;
    rf11 = rff;

    //右值引用=赋值运算符
    Reference rff2;
    rff2 = std::move(rff);

    return 0;
}

image

原文链接: https://www.cnblogs.com/rock-cc/p/13169733.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    08C++11右值引用

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/357208

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午11:38
下一篇 2023年3月2日 上午11:39

相关推荐