Skip to content

Instantly share code, notes, and snippets.

@mmitou
Created February 26, 2012 13:33
Show Gist options
  • Save mmitou/1916750 to your computer and use it in GitHub Desktop.
Save mmitou/1916750 to your computer and use it in GitHub Desktop.
簡易版SharedPointer
#ifndef __SHAREDPOINTER_HPP__
#define __SHAREDPOINTER_HPP__
template <class T>
class SharedPointer
{
public:
template <class U>
SharedPointer(U *obj)
{
pPointer = obj;
pReferenceCounter = new unsigned long;
(*pReferenceCounter) = 1;
}
SharedPointer(const SharedPointer<T>& sharedPointer)
{
pPointer = sharedPointer.pPointer;
pReferenceCounter = sharedPointer.pReferenceCounter;
(*pReferenceCounter) ++;
}
SharedPointer<T>& operator=(const SharedPointer<T>& sharedPointer)
{
pPointer = sharedPointer.pPointer;
pReferenceCounter = sharedPointer.pReferenceCounter;
(*pReferenceCounter) ++;
return *this;
}
T* get() const
{
return pPointer;
}
T* operator->() const
{
return pPointer;
}
T& operator*() const
{
return *pPointer;
}
~SharedPointer()
{
(*pReferenceCounter) --;
if((*pReferenceCounter) == 0) {
delete pPointer;
delete pReferenceCounter;
}
}
private:
unsigned long *pReferenceCounter;
T* pPointer;
};
#endif // __SHAREDPOINTER_HPP__
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment