通过了解智能指针的使用以及原理之后,写了一个很奇葩的shared_ptr版本的双链表实现。虽然误打误撞没有在关键的问题上产生循环引用,但是这个实现也非常巧妙的避开了智能指针的智能管理内存,还是在手动的管理着分配的空间。
再有甚是感觉代码写的不够精炼,贴出来供大家指正。希望能有所收获。
#include <iostream>
#include <boost/smart_ptr.hpp>
using namespace std;
template<typename T>
struct LNode
{
T data;
shared_ptr<LNode<T> > prior;
// weak_ptr<LNode<T> > prior;
shared_ptr<LNode<T> > next;
LNode(T d): data(d){}
LNode(){}
};
template<typename T>
class Dlinklist
{
private:
int len;
shared_ptr<LNode<T> > head;
public:
Dlinklist();
~Dlinklist();
int length() const;
bool isEmpty() const;
shared_ptr<LNode<T> > search(const T nodeData) const;
void insertNode(const T nodeData);
bool deleteNode(const T nodeData);
bool deleteNode(const shared_ptr<LNode<T> > pos);
};
template<typename T>
Dlinklist<T>::Dlinklist()
{
shared_ptr<