条款42 智能指针
是对c++语言的一种扩展
智能指针式一个类型,他乔装打扮为一个指针,并提供了内建指针无法提供的功能,也就是说,一个智能指针就是使用类的构造函数,析构函数,和复制操作符所所提供的功能来控制或跟踪他所指向的东西的访问,
他的应用有资源句柄和auto-ptr到stl迭代器从计数指针到指向成员函数的指针包装器
条款43 auto-prt
auto-prt是一个一个类模板,用于生成具体的智能指针
auto_ptr源码
template <class T>
class auto_ptr
{
public:
explicit auto_ptr(T *p = 0); //防止隐式转换
template <class U>
auto_ptr(auto_ptr<U>& rhs); //任何兼容的auto_ptr作为一个新的auto_ptr初值
~auto_ptr();
template <class U>
auto_ptr<T>& operator = (auto_ptr<U>& rhs);
T& operator * () const;
T* operator -> () const;
T* get()const; //返回保存的指针
T* release(); //返回保存指针,并使auto_ptr成为未绑定的状态
void reset(T *p = 0); //重新绑定
private:
T *pointee;
template <class U>
friend class auto_ptr<U>;
};
template <class T>
inline auto_ptr<T>::auto_ptr(T *p) //让所有的auto_ptr classes都成为另一个auto_ptr的友元
:pointee(p)
{}
template <class T>
template <class U>
inline auto_ptr<T>::auto_ptr(auto_ptr<U>& rhs)
:pointee(rhs.release())
{}
template <class T>
inline auto_ptr<T>::~auto_ptr()
{delete pointee;} //这里不是delete[],所以autuo_ptr不能保存动态数组
//不是简单的赋值,而是将实参绑定的对象转移到当前对象
template <class T>
template <class U>
inline auto_ptr<T>& auto_ptr<T>::operator = (auto_ptr<U>& rhs)
{
if (this != &rhs) reset(rhs.release());
return *this;
}
template <class T>
inline T& auto_ptr<T>::operator * () const
{return *pointee;}
template <class T>
inline T* auto_ptr<T>::operator -> () const
{return pointee;}
template <class T>
inline T* auto_ptr<T>::get() const
{return pointee;}
template <class T>
inline T* auto_ptr<T>::release()
{
T *oldptr = pointee;
pointee = 0;
return oldptr;
}
template <class T>
inline void auto_ptr<T>::reset(T *p)
{
//未处理p参数非法的情况
if (pointee != p){
delete pointee;
pointee = p;
}
}
条款44 指针运算
两个同类型的指针可以进行减运算,运算的结果是参见两个预算的指针之间的元素个数(不是字节数);
高地址减去低地址是正数;否则是负数;指针不是整数
list的迭代器不是一个内建指针,而是一个带有重建操作符的智能指针;
条款 45 模板术语
对于模板的实例化(instantiation)和特化(specialization)不是一回事
对模板的特化是指你以一套模板实参供应给一个模板所得到的东西;
模板的特化可能会也可能不会导致模板的实例化
把模板参数替换为实际类型的过程叫实例化,产成的结果比如:
template <>
class <char>
{
}; 这就是特化了.特化有局部和完全之分.
条款 46 类模板显式特化
条款 47 模板局部特化
不能对函数模板进行局部特化
条款 48 类模板成员特化
条款 49利用tyoename消除歧义
~~~
条款 61关键字
剩余的条款都是讲模板的,我的神啊,什么都看不懂,看来还是要好好学习吧
等专门看一本模板的书在回过头来看这些条款吧
本书暂时就看到这里多回顾,好好体会
革命尚未成功,我们仍需努力
加油 ~!!!!