template <class T>
class Dlist {
private:
class Dnode {
public:
T data;
Dnode* next;
Dnode* prev;
Dnode() :next(nullptr)
, prev(nullptr){}
Dnode(const T& value)
: data(value)
, next(nullptr)
, prev(nullptr)
{}
};
Dnode* head;
Dnode* tail;
size_t sz;
public:
Dlist() : head(nullptr), tail(nullptr), sz(0) { }
~Dlist() {
clear();
}
void clear() {
Dnode* curr = head;
while (curr != nullptr) {
Dnode* nxt = curr->next;
delete curr;
curr = nxt;
}
head = tail = nullptr;
sz = 0;
}
}
使用的时候我这么声明:Dlist<std::shared_ptr<A>> lst;
其中A是基类,里面有虚函数,B和C派生自A
lst里面可能会压入std::shared_ptr<B>也有可能压入std::shared_ptr<C>
那么Dnode和Dlist该怎么设计,现在的代码有问题,不支持多态。
--
FROM 223.104.40.*