我已经好几年没有使用C++了,而且我从来没有正确学习过内存分配和垃圾收集的工作原理。我一直在看视频并试图找到学习的资源,但我在作业中得到了指导,我不确定如何解释我需要做什么。
指令是"如果没有足够的内存来创建新对象,则该函数应返回 false;否则函数返回 true">
这是否意味着我应该使用 malloc(( 还是有另一种检查内存是否已满的方法?
另外,如果有人知道这个主题的好指南......
在C++中,你通常不应该使用malloc
;它更像是一个C函数,不能很好地与C++范式相吻合。
相反,您应该使用C++自己的技术来管理内存,例如new
和delete
。new
malloc
的好处是,new
将在构造函数的帮助下正确初始化对象,而不是简单地为您提供一个内存区域,您需要在其中仔细构造对象。同样,delete
将正确调用对象的析构函数(而free
不会(。
假设你的链表节点类/结构被称为Node
,表达式new Node
将为节点分配内存,并返回指向该节点的指针;如果内存不可用,将尽力尝试抛出异常(std::bad_alloc
(。
您可能想尝试捕获它,但如果内存不足,则无论如何您都无能为力,因为有用的操作(如打印错误消息(本身可能需要分配内存。
跳转到内存分配不是现代C++的主要方法。我们通常倾向于使用std
容器(vector
,list
,map
...(或std智能指针作为主要解决方案;如果这不适用和/或需要自定义容器智能指针,则需要考虑std::allocator
类系列。只有最后一个选项是new
/delete
运算符。当您阅读这篇文章到这里时,内存损坏的风险逐渐增加;如果你再往下挖,会出现严重危险的C API和malloc
/free
系列函数,但这个远远超出了限制,除非在非常极端的情况下,否则几乎不使用。