📄 countptr.h
字号:
#ifndef _COUNTPTR_H_
#define _COUNTPTR_H_
template<typename T>
class CountedPtr
{
private:
T * ptr;
long * count;
public:
explicit CountedPtr(T* p=0)
:ptr(p),count(new long(1)){}
//throw()表示此函数不抛出异常
//throw(...)表示此函数可以抛出异常
//throw(type)表示此函数抛出type类型的异常
CountedPtr(const CountedPtr<T> & p) throw()
:ptr(p.ptr),count(p.count)
{
++*count;
}
~CountedPtr() throw()
{
dispose();
}
CountedPtr<T> & operator=(const CountedPtr<T> & p) throw()
{
if(this!=&p)
{
dispose();
ptr=p.ptr;
count=p.count;
++*count;
}
return *this;
}
T& operator*() const throw()
{
return *ptr;
}
T* operator->() const throw()
{
return ptr;
}
private:
void dispose()
{
if(--*count==0)
{
delete count;
delete ptr;
}
}
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -