0

我正在尝试实现一个持有节点双向链表的复制赋值运算符,但我坚持进行深层复制而不是分配真正的指针: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

这就是我在复制分配复制构造对象时试图真正逃避的东西。

4

0 回答 0