链接列表移动构造函数

时间:2017-10-23 04:56:23

标签: c++ linked-list doubly-linked-list move-constructor

我正在尝试为双链表编写一个移动构造函数,但它不起作用。有人能帮助我找到我做错的事吗?

这是我的班级:

class SortedList {
    struct Node {
        T data_;
        Node* next_;
        Node* prev_;
        Node(const T& data = T{}, Node* nx = nullptr, Node* pr = nullptr) {
            data_ = data;
            next_ = nx;
            prev_ = pr;
        }
    };

    Node* front_;
    Node* back_;
    int sizelist;
}

这是我的移动构造函数:

SortedList<T>::SortedList(SortedList&& rhs) {
    if (&rhs != this) {
        sizelist = rhs.sizelist;
        front_ = rhs.front_;
        back_ = rhs.back_;  

        Node* head = rhs.front_;    
        Node* headNext =rhs.front_->next_;      
        for (int i = 0; i < rhs.sizelist-1; i++) {
            head = nullptr;
            head = headNext;            
            headNext = headNext->next_;         
        }
        rhs.sizelist = 0;
    }
}

1 个答案:

答案 0 :(得分:0)

您应该从旧对象获取数据的所有权,并将旧对象设为空列表 测试&#34;自我复制&#34;没有意义。在移动构造函数中。

SortedList<T>::SortedList(SortedList&& rhs)
{
    sizelist = rhs.sizelist;
    rhs.sizeList = 0;
    front_ = rhs.front_;
    rhs.front_ = nullptr;
    back_ = rhs.back_;
    rhs.back_ = nullptr;
}