C++ Constructor Create move constructor

Description

C++ Constructor Create move constructor

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>

using namespace std;
class MyContainer
{
  public://from  w w w .jav  a  2 s.  com
    MyContainer(int nS, const char* pS) : nSize(nS)
    {
        pString = new char[nSize];
        strcpy(pString, pS);
    }
    ~MyContainer()
    {
        delete pString;
        pString = nullptr;
    }

    //copy constructor
    MyContainer(const MyContainer& s)
    {
        copyIt(*this, s);
    }
    MyContainer& operator=(MyContainer& s)
    {
        delete pString;
        copyIt(*this, s);
        return *this;
    }

    // move constructor
    MyContainer(MyContainer&& s)
    {
        moveIt(*this, s);
    }
    MyContainer& operator=(MyContainer&& s)
    {
        delete pString;
        moveIt(*this, s);
        return *this;
    }

  protected:
    static void moveIt(MyContainer& tgt, MyContainer& src)
    {
        cout << "Moving " << src.pString << endl;
        tgt.nSize = src.nSize;
        tgt.pString = src.pString;
        src.nSize = 0;
        src.pString = nullptr;
    }
    static void copyIt(      MyContainer& tgt,
                       const MyContainer& src)
    {
        cout << "Copying " << src.pString << endl;
        delete tgt.pString;
        tgt.nSize = src.nSize;
        tgt.pString = new char[tgt.nSize];
        strncpy(tgt.pString, src.pString, tgt.nSize);
    }
    int nSize;
    char* pString;
};

MyContainer fn(int n, const char* pString)
{
    MyContainer b(n, pString);
    return b;
}

int main(int nNumberofArgs, char* pszArgs[])
{
    MyContainer mc(100, "Original");

    mc = fn(100, "Created in fn()");

    return 0;
}



PreviousNext

Related