利用智能指针实现双链表的增删查

本文介绍了使用shared_ptr实现双链表的过程,探讨了智能指针在避免循环引用和内存管理中的作用。尽管代码可能存在不精炼之处,但作者意识到对于非动态分配的内存,普通指针可能更为合适。后续计划使用shared_ptr和weak_ptr来完善智能指针的运用。
摘要由CSDN通过智能技术生成

通过了解智能指针的使用以及原理之后,写了一个很奇葩的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<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值