我应该将 malloc() 用于链表吗?



我已经好几年没有使用C++了,而且我从来没有正确学习过内存分配和垃圾收集的工作原理。我一直在看视频并试图找到学习的资源,但我在作业中得到了指导,我不确定如何解释我需要做什么。

指令是"如果没有足够的内存来创建新对象,则该函数应返回 false;否则函数返回 true">

这是否意味着我应该使用 malloc(( 还是有另一种检查内存是否已满的方法?

另外,如果有人知道这个主题的好指南......

在C++中,你通常不应该使用malloc;它更像是一个C函数,不能很好地与C++范式相吻合。

相反,您应该使用C++自己的技术来管理内存,例如newdeletenewmalloc的好处是,new将在构造函数的帮助下正确初始化对象,而不是简单地为您提供一个内存区域,您需要在其中仔细构造对象。同样,delete将正确调用对象的析构函数(而free不会(。

假设你的链表节点类/结构被称为Node,表达式new Node将为节点分配内存,并返回指向该节点的指针;如果内存不可用,将尽力尝试抛出异常(std::bad_alloc(。

您可能想尝试捕获它,但如果内存不足,则无论如何您都无能为力,因为有用的操作(如打印错误消息(本身可能需要分配内存。

跳转到内存分配不是现代C++的主要方法。我们通常倾向于使用std容器(vectorlistmap...(或std智能指针作为主要解决方案;如果这不适用和/或需要自定义容器智能指针,则需要考虑std::allocator类系列。只有最后一个选项是new/delete运算符。当您阅读这篇文章到这里时,内存损坏的风险逐渐增加;如果你再往下挖,会出现严重危险的C API和malloc/free系列函数,但这个远远超出了限制,除非在非常极端的情况下,否则几乎不使用。

相关内容

  • 没有找到相关文章

最新更新