我正在尝试为双链表编写一个移动构造函数,但它不起作用。有人能帮助我找到我做错的事吗?
这是我的班级:
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;
}
}
答案 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;
}