我对实现一个双向链表有点困惑,其中列表中的数据是指针。
我的链表类的私有部分如下所示:
private:
struct node {
node* next;
node* prev;
T* o;
};
node* first; // The pointer to the first node (NULL if none)
node* last; // The pointer to the last node (NULL if none)
unsigned int size_;
如您所见,列表中充满了指向对象的指针,而不仅仅是普通的旧对象,这让我有点困惑。
以下是规范中的描述:
请注意,虽然此列表是跨包含类型 T 模板化的,但它仅插入和删除指向 T 的指针,而不是 T 的实例。这确保 Dlist 实现知道它拥有插入的对象,如果列表,它负责复制它们被复制,如果列表被销毁,它必须销毁它们。
这是我当前的 insertFront(T* o) 实现:
void Dlist::insertFront(T* o) {
node* insert = new node();
insert->o = new T(*o);
insert->next = first;
insert->prev = last;
first = insert;
}
不过,这似乎是错误的。如果 T 没有复制构造函数怎么办?这如何确保列表中对象的唯一所有权?
我可以这样做:
insert->o = o;
这似乎不安全,因为如果您有:
Object* item = new Object();
dlist.insertFront(item);
delete item;
然后该项目也将被销毁列表。它是否正确?我的理解有问题吗?
谢谢阅读。
注意:虽然这看起来像家庭作业,但事实并非如此。我实际上是一个 java 开发人员,只是通过做一个老派项目来提高我的指针技能。