- 智能指针类
-
当你一智能指针取代内建指针的时候,你将获得各类指针行为的控制权1.析构与构造【我们通常可以决定一个对象产生或者销毁时应该做什么。通常我们会给智能指针一个默认值0;当最后一个智能指针被销毁时,智能指针有责任删除他们所指对象】2.复制与构造【当一个智能指针被复制或者涉及赋值动作时,你可以控制发生什么事】3.解引【当客户解引用指针所指之物时,,你有权决定发生什么事】 -
template<class T>
class SmartPtr{
public:
SmartPtr(T* realPtr=0);
SmartPtr(const SmartPtr& rhs);
~SmartPtr;
SmartPtr& operator=(const SmartPtr&rhs);
T* operator->()const;
T* operator*()const;
private:
T* pointeree;
};
-
如何解决:因同一对象只能被一个只能指针所拥有,而一旦智能指针被复制或者赋值时所发生的一系列问题:将对象的拥有权转移
template<class T>
class auto_ptr{
auto_ptr(auto_ptr<T>&rhs);
auto_ptr<T>&operator=(auto_ptr<T>&rhs);
...
};
template<class T>
auto_ptr<T>::auto_ptr(auto_ptr<T>&rhs){
pointee=rhs.pointee;//将*pointer的所有权转移给*this
rhs.pointee=0;//rhs不在拥有任何东西
}
template<class T>
auto_ptr<T>&auto_ptr<T>::operator=(auto_ptr<T>&rhs){
if(this==&rhs)
return *this;
delete ponitee;
pointee=rhs.pointee;
rhs.pointee=0;
return *
}
operator*()返回所指对象的reference。
operator->()返回一个普通指针,当对空智能指针调用operator->()的时候是允许的,这是个无定义行为,无所谓对错。
|