lab3完成记录
随着lab4的发布,期中考试的结束短暂休息
我终于有一些时间整理一下lab3完成过程中的一些收获
一、题目解析
程序主体:
实现一个终端运行的汉诺塔小游戏。有玩家操控和电脑操控两种模式
程序难点
汉诺塔本身,是一个较为简单的递归(autoplay)和模拟(人工)
而引入Unique_ptr智能指针,所有权的限制对程序的严谨性提出了更高的要求。智能指针也就成了本次lab的难点
同时,这次要求stack,queue等数据结构,都由Unique_ptr实现。很多操作也受到限制。
二、参考blog
C++中类内函数生成规律&大三律
其中第一篇起了很大的作用;虽然底层源码可读性不是那么强,但也能朦胧中找到一些思路。特别是所有权转移、释放,如何进行,在何时进行,都可以从源码中学习。应该算作抄袭 也有一些额外收获:底层的析构器可以选默认,也可以自己写;即使是默认的delete析构,也可以重载qwq(虽然不经常用就是了
类生成时,几种函数的生成有规律可循,有时候会出现错误(比如我们的助教没有加上移动构造函数)。而大三律将复制操作与析构函数捆绑,是对资源管理的一种细化。
之后的两篇blog更像是一种补充,不做赘述。
最大的问题在于reset需要delete原指针,否则会造成内存的泄漏。这也是和普通指针的最大差别:普通指针可以多个指针指向同一个元素,而智能指针中,一个元素只能被一个智能指针指向,所以在指针reset后,需要释放空间,防止内存泄漏。