《c++必知必会》学习心得——day4
来源:互联网 发布:现在做淘宝还能挣钱吗 编辑:程序博客网 时间:2024/06/13 22:29
条款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关键字
剩余的条款都是讲模板的,我的神啊,什么都看不懂,看来还是要好好学习吧
等专门看一本模板的书在回过头来看这些条款吧
本书暂时就看到这里多回顾,好好体会
革命尚未成功,我们仍需努力
加油 ~!!!!
- 《c++必知必会》学习心得——day4
- IMWeb提升营 —Day4
- 黑马程序员—C语言学习心得
- 查漏补缺,巩固基础——C++Primer之旅day4
- C语言:Day1~Day4
- 福建省队集训被虐记——DAY4
- Mysql学习之路——day4
- 爬虫之路——Day4
- IMWeb前端学习笔记——Day4
- DAY4——腾讯训练营
- LoadRunner学习笔记——Day4
- c语言学习心得——小Z个人
- C陷阱与缺陷学习心得之——词法缺陷
- objective-C:Day3~Day4
- c语言学习日志 day4
- C学习心得
- c学习心得
- day4
- 汉字定义的变量名,类名
- 即使是strut2 也要写scope
- 基于链路的OSPF认证+小结
- wubi安装ubuntu 重装Windows7/Vista/XP 启动项恢复
- 网络socket的描述和相关结构定义
- 《c++必知必会》学习心得——day4
- ANDROID问题 那位好心人帮我解答一下啊
- 常用的几种进程通信方式的比较
- 广告效应
- english introduce
- jdbc连接Sqlserver数据库
- [转贴]关于在c#里面调用win api的方法.(我看过得最详细的帖子)
- [答案V0.1版]精选微软等数据结构+算法面试100题 [前20题]
- php session登录验证实例与 cookie登录验证实例