C++智能指针的模拟实现

Posted zhaocx111222333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++智能指针的模拟实现相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<mutex>
using namespace std;

//智能指针的模拟
//内部就是一个需要管理的空间
//构造函数赋值,析构函数清理
//指针要实现*,返回解引用后的空间,->返回指针
//auto_ptr的核心是拷贝构造,赋值运算符的管理权转移(参数一定要引用!!!因为要拿走它的资源)
//赋值运算符因为不是构造,要先判断不是给自己复制,在清理空间再复制,返回*this
template<class T>
class Auto_ptr
public:
	Auto_ptr(T* ptr=nullptr)
		:_ptr(ptr)
	

	~Auto_ptr()
		if (_ptr != nullptr)
			delete _ptr;
	

	Auto_ptr(Auto_ptr<T>& a)
		_ptr = a._ptr;
		a._ptr = nullptr;
	

	Auto_ptr<T>& operator=(Auto_ptr<T>& a)//返回的是智能指针,也就是整个智能指针对象(引用提高效率)
		if (&a != this)						//也就是*this
			if (this->_ptr)
				delete _ptr;//delete
			_ptr = a._ptr;
			a._ptr = nullptr;
		
		return *this;
	

	T& operator*() return *_ptr; //解引用当然拿到的是数值内容,是返回引用
	T* operator->() return _ptr; //箭头是指拿到内部的东西,也就是拿到指针

private:
	T* _ptr;
;

//unique_ptr就是禁用了拷贝构造和赋值运算符的unique_ptr;



//shared_ptr需要自己在内部维护互斥锁指针和引用计数指针
//特殊点在于拷贝构造,赋值运算符计数+1,构造不用,析构要看情况析构
//计数加一要加锁,释放需要加锁(注意如果计数为0,解锁后才释放资源)
template <class T>
class Shared_ptr
public:
	Shared_ptr(T* ptr=nullptr)
		:_ptr(ptr),
		_mutex(new mutex),
		_count(new int(1))
	

	~Shared_ptr()
		Release();
	
	
	void countadd()
		_mutex->lock();
		(*_count)++;	//注意要解引用
		_mutex->unlock();
	
	
	Shared_ptr (const Shared_ptr<T>& p)
		:_ptr(p._ptr),
		_mutex(p._mutex),
		_count(p.count)
	
			countadd();
	

	Shared_ptr<T>& operator=(Shared_ptr<T>& p)
		if (this != &p)
			Release();//释放this的智能指针的空间
			_ptr = p.ptr;
			_mutex = p._mutex;
			_count = p._count;
			countadd();
		
		return *this;
	
	T& operator*()  return *_ptr; 
	T* operator->()  return _ptr; 
	int UseCount()  return *_pRefCount; 

private:
	void Release()
		bool m = flase;
		_mutex->lock();
		if ((--(*_count)) == 0)
			delete _count;
			delete _ptr;
			m = true;
		
		_mutex->unlock();
		if (m)
			delete _mutex;
		
	
	T* _ptr;
	mutex* _mutex;
	int* _count;
;

以上是关于C++智能指针的模拟实现的主要内容,如果未能解决你的问题,请参考以下文章

C++智能指针的模拟实现

C++智能指针的模拟实现

C++智能指针讲解及模拟实现

模拟实现c++标准库和boost库中的智能指针

C++智能指针的作用,模拟实现auto_ptr,scoped_ptr,shared_ptr

C++进阶---智能指针