美文网首页
移动构造函数

移动构造函数

作者: 大啸 | 来源:发表于2020-08-27 22:27 被阅读0次

    #include <iostream>

    #include <string>

    #include <sstream>

    #include <vector>

    #include <string.h>

    #include <initializer_list>

    const bool debug = true;

    void Debug(std::initializer_list<std::string> list)

    {

    if (debug)

    {

    for (const auto& v : list)

    {

    std::cout << "[" << v << " ] - ";

    }

    std::cout << std::endl;

    }

    }

    class myString

    {

    public:

    myString() : name(nullptr), len_(0)

    {

    Debug({ "myString default constructor" });

    };

    myString(const char* str, unsigned int len) : len_(++len)

    {

    name = new char[len];

    memcpy(name, str, len);

    Debug({ "myString constructor" });

    }

    myString(const myString& str)

    {

    name = new char(str.len_);

    memcpy(name, str.name, str.len_);

    len_ = str.len_;

    Debug({ "myString copy" });

    }

    myString(const myString&& str) noexcept : len_(str.len_)

    {

    name = new char(str.len_);

    memcpy(name, str.name, str.len_);

    Debug({ "myString r copy" });

    }

    myString& operator= (const myString& str)

    {

    name = new char(str.len_);

    memcpy(name, str.name, str.len_);

    len_ = str.len_;

    Debug({ "myString = " });

    return *this;

    }

        void set()

        {

            memset(name, 0, len_);

            const char* str = "world";

            memcpy(name, str, 7);

        }

    ~myString()

    {

    Debug({ "myString Destructor", name });

    if (name != nullptr)

    delete[] name;

    else

    std::cout << "errpor double free" << std::endl;

    }

    char* name;

    unsigned int len_;

    };

    class HeadInfo

    {

    public:

    HeadInfo(const std::string name, const std::string info)

    : itsName(name), itsInfo(info) , context("hello", 6)

    {

    Debug({ "HeadInfo default Constructor" });

    }

    HeadInfo(std::string name, std::string info, myString& con)

    : itsName(std::move(name)), itsInfo(std::move(info)) , context(std::move(con))

    {

    Debug({ "HeadInfo Constructor" });

    }

    HeadInfo(const HeadInfo& headinfo)

    {

    itsName = headinfo.itsName;

    itsInfo = headinfo.itsInfo;

    context = headinfo.context;

    Debug({ "HeadInfo copy" });

    }

    HeadInfo(const HeadInfo&& headinfo) noexcept

    {

    itsName = headinfo.itsName;

    itsInfo = headinfo.itsInfo;

    context = headinfo.context;

    Debug({ "HeadInfo r copy" });

    }

    HeadInfo& operator=(const HeadInfo& headinfo)

    {

    itsName = headinfo.itsName;

    itsInfo = headinfo.itsInfo;

    Debug({ "HeadInfo operator= " });

    return *this;

    }

    ~HeadInfo() { Debug({ "HeadInfo Destructor " }); }

    std::string itsName;

    std::string itsInfo;

    myString    context;

    };

    int main()

    {

    std::vector<HeadInfo> vec;

    vec.reserve(0);

    myString str("hello", 6);

    HeadInfo info("1", "2", str);

        str.set();

        std::cout << "-------------" << std::endl;

        myString&& str1 = std::move(str);

    return 0;

    }

    相关文章

      网友评论

          本文标题:移动构造函数

          本文链接:https://www.haomeiwen.com/subject/njohsktx.html