【无标题】SJTU SE lab3思路概述

lab3完成记录

随着lab4的发布,期中考试的结束短暂休息

我终于有一些时间整理一下lab3完成过程中的一些收获

一、题目解析

程序主体:

实现一个终端运行的汉诺塔小游戏。有玩家操控和电脑操控两种模式

程序难点

汉诺塔本身,是一个较为简单的递归(autoplay)和模拟(人工)

而引入Unique_ptr智能指针,所有权的限制对程序的严谨性提出了更高的要求。智能指针也就成了本次lab的难点

同时,这次要求stack,queue等数据结构,都由Unique_ptr实现。很多操作也受到限制。

二、参考blog

unique_ptr源码

C++中类内函数生成规律&大三律

创建对象时() 与 {} 的区别

c++智能指针

其中第一篇起了很大的作用;虽然底层源码可读性不是那么强,但也能朦胧中找到一些思路。特别是所有权转移、释放,如何进行,在何时进行,都可以从源码中学习。应该算作抄袭 也有一些额外收获:底层的析构器可以选默认,也可以自己写;即使是默认的delete析构,也可以重载qwq(虽然不经常用就是了

类生成时,几种函数的生成有规律可循,有时候会出现错误(比如我们的助教没有加上移动构造函数)。而大三律将复制操作与析构函数捆绑,是对资源管理的一种细化。

之后的两篇blog更像是一种补充,不做赘述。

最大的问题在于reset需要delete原指针,否则会造成内存的泄漏。这也是和普通指针的最大差别:普通指针可以多个指针指向同一个元素,而智能指针中,一个元素只能被一个智能指针指向,所以在指针reset后,需要释放空间,防止内存泄漏。

sjtu win win win

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值