本周的课程涉及的知识点非常繁杂多变 这里我挑选出几个我认为值得自己以及大家注意和值得深究的地方:
【pointer - like classes】
课程中 侯捷老师运用了 智能指针 与 迭代器 两个经典的例子 给我们阐释了pointer - like class,
按我的理解 智能指针就是在class的data中包含了一个指针 并且这个指针可以指向任何想要指向的object
从而达到了指针的作用
因此 若想要达到指针的作用 就必须要重写操作符*与&
*注意点:箭头符号->的特殊行为:作用下去得到的结果,箭头符号会继续作用在得到的东西上
引申:侯捷老师只是粗略地介绍了定义与用法 在课程中 老师提出了一个问题:
为何让class像一个指针or像一个函数呢?其目的何在?
这里通过查阅相关资料 我总结如下:
智能指针在面对异常的时候格外有用,因为他们能够确保正确的销毁动态分配的对象。他们也可以用于跟踪被多用户共享的动态分配对象。
这也就是智能指针最有用的地方 因为如果是类的对象 则会自动的调用析构函数来用以销毁对象 而不用手动销毁 确保了内存泄漏
【 reference 】
在本周末尾 侯捷老师讲解了引用& 其实reference by pointer 指的即是指针 又是引用
而引用 是一种漂亮的指针 其本质意义上 就是指针
只不过使用引用的写法 相较于指针 会更加简洁 明确
引申: 那么如果指针和引用联系在一起 又会产生什么结果呢?
1). ** 指针的指针
2). *&指针的引用
二者其实都是指针 指针的指针其实是一个指向了指针的指针 其中存储了指向指针的地址
这里我列举出一个我在网上查找到的非常简洁明了的资料图来说明指针的指针:
指针的引用,指针它也是一个变量,*&就和普通变量的引用一样,也可以理解为指针变量的别名。
而指针的引用 相当于传递了其他指针变量的地址 这样一来 指针的数值就可以人为的发生改变 而指针本身的数值(指针本身的地址)是不允许发生改变的
例如:
fun(int * pA); // pA的数值在函数返回后不会变化
fun(int*& pA); // pA的数值在函数返回可能会发生变化,如果fun函数内部对pA赋值的话
void InitStack(LNode* & HS)
{
HS = NULL; // 函数返回后, HS就是NULL了
}
void InitStack(LNode* HS)
{
HS = NULL; // 函数返回后, HS依然是传递进来的数值
}
*/
另外一篇文章有两个例子 分别给了指针的指针和指针的引用:
https://www.canadapost.ca/cpotools/apps/track/personal/findByTrackNumber?trackingNumber=2006603813774502&LOCALE=en&LOCALE2=en.