移动构造函数

暂存一下。

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "NTree.h"
#include "logging.h"
#include <iostream>

template <typename T>
class base {
public:
    struct node
    {
        T data;
        node *parent;
        std::vector<node*> children;
    };
    base():_root(nullptr)
    {
        Mes("base 无参 构造函数");
    }
    base(node *root):_root(root)
    {
        Mes("base node 构造函数");
    }
    base(const base &b):_root(b._root)
    {
        Mes("base base 构造函数");
    }
    base(base &&b):_root(std::move(b._root))
    {
        Mes("base move 构造函数");
    }


private:
    node *_root;
};

template <typename T>
class middle :public base<T> {
public:
    middle<T>() :base<T>()
    {
        Mes("middle 无参 构造函数");
    }
    middle<T>(base<T>::node *m):base<T>(m)
    {
        Mes("middle node 构造函数");
    }
    middle<T>(const middle &m) : base<T>(m)
    {
        Mes("middle middle 构造函数");
    }
    middle<T>(middle &&m) : base<T>(move(m))
    {
        Mes("middle move 构造函数");
    }
};

using namespace std;

static float gl = 1.1111f;

void ref(string &str)
{
    Mes("左值");
}

void ref(string &&str)
{
    Mes("右值");
}

int main()
{
    middle<int>::node na, nb;
    na.data = 1;
    nb.data = 9;

    middle<int> a;

    middle<int> b(a);

    // middle<int> &&c = move(b);

    middle<int> c(move(b));

    string lv1 = "string,";

    ref(move(lv1));
    string&& rv1 = move(lv1);

    info << "rv1 = " << rv1 << endl;
    Mes(info.str());

    system("pause");
    return 0;
}

=====================

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容