shared_ptr智能指針的簡單實現

#ifndef SHARED_PTR_H
#define SHARED_PTR_H

#include <stdio.h>
#include <iostream>

using namespace std;

template <typename T> // 泛型編程
class Shared_ptr
{
public:
	Shared_ptr() : m_ptr(nullptr), m_cnt(new size_t(0))
	{}

	Shared_ptr(T* ptr) : m_ptr(ptr), m_cnt(new size_t(1))
	{}

	~Shared_ptr()
	{
		if (--(*m_cnt) == 0)
		{
			delete m_ptr;
			m_ptr = nullptr;

			delete m_cnt;
			m_cnt = nullptr;
		}
	}

	Shared_ptr(const Shared_ptr& ptr)
	{
		m_cnt = ptr.m_cnt;
		m_ptr = ptr.m_ptr;
		++(*m_cnt);
	}

	Shared_ptr& operator =(Shared_ptr& share_ptr)
	{
		m_ptr = share_ptr.m_ptr;
		share_ptr.(*m_cnt)++;
		m_cnt = share_ptr.m_cnt;    //使它們指向同一個地址空間,實現數據共享
		return *this;
	}

	T& operator*()
	{
		return *m_ptr;
	}

	T* operator ->()
	{
		return m_ptr;
	}

	T* get()
	{
		return m_ptr;
	}

private:
	T* m_ptr;
	size_t* m_cnt; //指針,才能被共享
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章