c++类 赋值、拷贝、移动拷贝和移动赋值构造函数

class AAA
{
public:
    AAA() : m_pData( new int )
    {
        *m_pData = 0;
    }
    virtual ~AAA() {
        if (nullptr != m_pData)
            delete m_pData;
    }

    AAA(const AAA&  aaa)//拷贝构造函数
    {
        std::cout << "拷贝构造函数!\n";
        m_pData = new int;
        *m_pData = *aaa.m_pData;
    }

    AAA& operator = (const AAA &aaa) //赋值构造函数
    {
        std::cout << "赋值构造函数!\n";
        if (this !=  &aaa )
        {
            if( nullptr == m_pData )
                m_pData = new int;
            *m_pData = *aaa.m_pData;
        }
        return *this;
    }

    AAA(AAA&& aaa)//移动拷贝构造函数
    {
        std::cout << "移动拷贝构造函数!\n";
        m_pData = aaa.m_pData;
        aaa.m_pData = nullptr;
    }

    AAA& operator = ( AAA&& aaa) //移动赋值构造函数
    {
        std::cout << "移动赋值构造函数!\n";
        if (this != &aaa)
        {
            if (nullptr != m_pData)
                delete m_pData;
            m_pData = aaa.m_pData;
            aaa.m_pData = nullptr;
        }
        return *this;
    }

private:
    int* m_pData;//本例子 m_pData指向 非数组
};

int main()
{
    AAA a;

    AAA b;
    b = a;//赋值构造函数

    AAA c1 = a;//拷贝构造函数
    AAA c(a);

    AAA d = std::move(a);//移动拷贝构造函数
    AAA e(std::move(b));
    b = std::move(e);// 移动赋值构造函数
}

你可能感兴趣的:(C++,c++,开发语言)