#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; //指針,才能被共享
};