64,687
社区成员
发帖
与我相关
我的任务
分享
template<typename T>
class t_ptr
{
public:
explicit t_ptr(const int&);
explicit t_ptr(const T *,const int&); ///Notice:deep copy
explicit t_ptr(const t_ptr<T> &_copyobj); ///Notice:deep copy
~t_ptr() { delete []_ptr; }
void clear();
int copy(const T *,const int&);
int copy(const t_ptr &);
int length() const { return _size; }
T* ptr() { return _ptr; }
void swap(T* _exchange);
private:
int _size;
T *_ptr;
};
template<typename T> t_ptr<T>::t_ptr(const int& _newlen)
{
_size = 0;
_ptr = NULL;
if(_ptr = new T[_newlen])
_size = _newlen;
else
throw std::runtime_error("New TempPtr Object Failed");
}
template<typename T> t_ptr<T>::t_ptr(const T* _src,const int& _srclen)
{
_size = 0;
_ptr = NULL;
if(0 == _srclen || NULL == _src)
return;
if(_ptr = new T[_srclen])
_size = _srclen;
else
throw std::runtime_error("New TempPtr Object Failed");
memcpy(_ptr,_src,_srclen);
}
template<typename T> t_ptr<T>::t_ptr(const t_ptr<T> &_src)
{
_size = 0;
_ptr = NULL;
if(_ptr = new T[_src.length()])
_size = _src.length();
else
throw std::runtime_error("New TempPtr Object Failed");
memset(_ptr,_src.ptr(),_size);
}
template<typename T> void t_ptr<T>::clear()
{
if(0 == _size)
return;
delete []_ptr;
_size = 0;
}
template<typename T> int t_ptr<T>::copy(const T* _src,const int& _srclen)
{
if(0 == _srclen || NULL == _src)
return -1;
T *_temp = new T[_srclen];
memcpy(_temp,_src,_srclen);
this->swap(_temp);
_size = _srclen;
delete []_temp;
return _size;
}
template<typename T> int t_ptr<T>::copy(const t_ptr &_src)
{
if(0 == _src.length())
return -1;
int _srclen = _src.length();
T *_temp = new T[_srclen];
memcpy(_temp,_src.ptr(),_srclen);
this->swap(_temp);
_size = _srclen;
delete []_temp;
return _size;
}
template<typename T> void t_ptr<T>::swap(T* _exchange)
{
T *_tempex = _ptr;
_ptr = _exchange;
_exchange = _tempex;
}
#include "iostream"
using namespace std;
template<typename T>
class t_ptr
{
public:
explicit t_ptr(const int&);
explicit t_ptr(const T *,const int&); ///Notice:deep copy
explicit t_ptr(const t_ptr<T> &_copyobj); ///Notice:deep copy
~t_ptr() { delete []_ptr; }
void clear();
int copy(const T *,const int&);
int copy(const t_ptr &);
int length() const { return _size; }
T* ptr() { return _ptr; }
void swap(T* _exchange);
private:
int _size;
T *_ptr;
};
template<typename T> t_ptr<T>::t_ptr(const int& _newlen)
{
_size = 0;
_ptr = NULL;
if(_ptr = new T[_newlen])
_size = _newlen;
else
throw std::runtime_error("New TempPtr Object Failed");
}
template<typename T> t_ptr<T>::t_ptr(const T* _src,const int& _srclen)
{
_size = 0;
_ptr = NULL;
if(0 == _srclen || NULL == _src)
return;
if(_ptr = new T[_srclen])
_size = _srclen;
else
throw std::runtime_error("New TempPtr Object Failed");
memcpy(_ptr,_src,_srclen);
}
template<typename T> t_ptr<T>::t_ptr(const t_ptr<T> &_src)
{
_size = 0;
_ptr = NULL;
if(_ptr = new T[_src.length()])
_size = _src.length();
else
throw std::runtime_error("New TempPtr Object Failed");
memset(_ptr,_src.ptr(),_size);
}
template<typename T> void t_ptr<T>::clear()
{
if(0 == _size)
return;
delete []_ptr;
_size = 0;
}
template<typename T> int t_ptr<T>::copy(const T* _src,const int& _srclen)
{
if(0 == _srclen || NULL == _src)
return -1;
T *_temp = new T[_srclen];
memcpy(_temp,_src,_srclen);
this->swap(_temp);
_size = _srclen;
delete []_temp;
return _size;
}
template<typename T> int t_ptr<T>::copy(const t_ptr &_src)
{
if(0 == _src.length())
return -1;
int _srclen = _src.length();
T *_temp = new T[_srclen];
memcpy(_temp,_src.ptr(),_srclen);
this->swap(_temp);
_size = _srclen;
delete []_temp;
return _size;
}
template<typename T> void t_ptr<T>::swap(T* _exchange)
{
T *_tempex = _ptr;
_ptr = _exchange;
_exchange = _tempex;
}
int main()
{
t_ptr<char> _temp(5);
system("pause");
return 0;
}
win7 32位 vs2003.net 测试通过
微软不厚道,vs越升越大,越奇怪,还是vc6,vs2003.net 经典,小而精
int main()
{
t_ptr<char> _temp(5);
return 0;
}