我正在尝试实现一个持有节点的双向链表的复制赋值运算符,但我坚持进行深层复制而不是分配真正的指针:int*
class ListOfArrays {
struct ArrayNode {
int* data_;
int size_;
ArrayNode* prev_;
ArrayNode* next_;
ArrayNode(int* data, int size)
: data_(data), size_(size), prev_(0), next_(0)
{}
~ArrayNode() {
delete [] data_;
}
};
int size_;
ArrayNode* head_;
public:
ListOfArrays()
: size_(0), head_(new ArrayNode(0, 0))
{
head_->prev_ = head_->next_ = head_;
}
ListOfArrays(const ListOfArrays& other)
: size_(other.size_), head_(other.head_) {
head_->prev_ = other.head_->prev_;
head_->next_ = other.head_->next_;
}
ListOfArrays& operator=(const ListOfArrays& other) {
if (this != &other) {
delete head_;
size_ = other.size_;
head_ = other.head_;
// I am confused what to actually do here
head_->prev_ = other.head_->prev_;
head_->next_ = other.head_->next_;
}
return *this;
}
}
现在的问题是我仍然指向同一个int* data_
,如果我修改“副本”,我会修改原来的:
ListOfArrays l;
// ... adding some data ...
ListOfArrays copy;
copy = l;
// modifying copy results in modification in the first list
这就是我在复制分配或复制构造对象时试图真正逃避的东西。