防拷贝的两个条件:
1、保护限定符;
类外无法定义
2.、显示进行声明
不进行声明,系统将会自动生成默认的,是浅拷贝
这种方法简单,粗暴。不让使用拷贝构造和赋值运算符重载,你进行使用会编译错误
代码如下:
template<class T>
class ScopedPtr
{
public:
ScopedPtr(T* ptr)
:_ptr(ptr)
{}
~ScopedPtr()
{
if (_ptr)
{
cout << "delete" << _ptr << endl;
delete _ptr;
}
}
protected:
ScopedPtr(const ScopedPtr<T>& ap);
ScopedPtr<T>& operator=(const ScopedPtr<T>& ap);
public:
T& operator*()
{
return *_ptr;
}
T* operator->()
{
return _ptr;
}
T* GetPtr()
{
return _ptr;
}
protected :
T* _ptr;
};