移动构造函数

2019-12-05  本文已影响0人  皿卜土

暂存一下。

// 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;
}

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

上一篇 下一篇

猜你喜欢

热点阅读