您的位置:首页 > 编程语言 > C语言/C++

智能指针的模板,用来管理动态分配的内存

2014-07-22 21:47 447 查看
#ifndef SMARTPTR_HPP
#define SMARTPTR_HPP
#include <stddef.h>

template <typename T>
class SmartPtr{
public:
SmartPtr(T *type = NULL);
void resetPtr(T *type);
const T *getPtr()const;
operator bool() const{
return ptr_ == NULL;
}
~SmartPtr();

T &operator*();
const T &operator*()const;
T *operator->();
const T *operator->()const;

private:
SmartPtr(const SmartPtr &);
void operator=(const SmartPtr &);
T *ptr_;
};

template <typename T>
inline SmartPtr<T>::SmartPtr(T *type)
:ptr_(type)
{}

template <typename T>
inline void SmartPtr<T>::resetPtr(T *type)
{
if(ptr_ != type){
if(ptr_ != NULL){
delete ptr_;
}
ptr_ = type;
}
}

template <typename T>
inline const T *SmartPtr<T>::getPtr() const
{
return ptr_;
}

template <typename T>
inline SmartPtr<T>::~SmartPtr()
{
if(ptr_ != NULL){
delete ptr_;
}
}

template <typename T>
inline T &SmartPtr<T>::operator*()
{
return *ptr_;
}

template <typename T>
inline const T &SmartPtr<T>::operator*() const
{
return *ptr_;
}

template <typename T>
inline T *SmartPtr<T>::operator->()
{
return ptr_;
}

template <typename T>
inline const T *SmartPtr<T>::operator->() const
{
return ptr_;
}
#endif  /*SMARTPTR_H*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息