ScopedPtr:
1.将拷贝构造和赋值运算符重载设为protected类型。
2.定义构造函数和赋值运算符重载函数。
#pragma once
template<class T>
class ScopedPtr
{
public:
ScopedPtr() //无参
:_ptr(NULL)
{}
ScopedPtr(T* ptr)
:_ptr(ptr)
{}
~ScopedPtr()
{
if (_ptr)
{
delete _ptr;
_ptr = NULL;
}
}
T* operator* ()
{
return *_ptr;
}
T& operator->()
{
return _ptr;
}
protected://定义为保护类,不让外界定义和使用。
ScopedPtr(const ScopedPtr<T>& sp);
ScopedPtr& operator=(const ScopedPtr<T>& sp);
protected:
T* _ptr;
};
void TestScopPtr()
{
ScopedPtr<int> sp1(new int(1));
//ScopedPtr<int> sp2(sp1);
}