另外,还要感谢丹尼尔·纽比回答了我的内存使用问题( Martin对此做了更多的解释)。这绝对是我一直在寻找的答案,但更多的其他问题被其他人回答了。
谢谢大家
澄清了我所有的顾虑。很高兴看到事情的运行方式,我希望他们运行。
我遇到了一些我不太确定的事情。
在我的程序中,我不使用malloc()或free()__。我正在使用destructor和创建类的实例--我确保每个类都运行--当它是 delete'd,时,它们都是--但是,没有free()调用,甚至没有将它们的指针(指向全局范围内的事物或其他类)设置为NULL或0__。
我所说的“我已经确定了”,并不是我把每个析构函数都称为析构函数。我只使用delete来调用析构函数来运行,但是每次创建对象时都会增加一个变量,每次运行析构函数时都会增加一个变量。这就是我如何确保创建的对象数量等于调用.的析构函数的数量。
我应该使用malloc()和free()吗?我应该是NULL__ing指向我仍然想存在的东西的指针吗?
第二个问题是,当我查看任务管理器时,为什么我的过程从不“丢弃”内存?它过去从来没有停止增长,然后我启动了deleting一切正常。或者我是这样想的。
free()或delete不会降低内存使用量吗?
关于链接列表的malloc_‘ing和free_’ing内存,我应该进行哪些实践?
发布于 2010-03-03 16:04:29
很少有理由在malloc()和free()程序中使用C++。坚持new和delete。注意,与垃圾收集语言不同,在C++中将指针设置为NULL或0与释放内存无关。
发布于 2010-03-03 16:01:50
您应该在new中使用delete,在malloc中使用free。delete将调用类的析构函数,因此不必显式调用它。析构函数的目的是释放类可能拥有的资源,delete也会释放内存。
唯一需要解释使用析构函数的时间是通过 安置新初始化对象时。您应该把自己放在编译器生成的代码释放资源的位置上--阅读本文中关于C++成语:资源获取是初始化的文章。
此外,将类的指针设置为null也不做任何事情,后台没有垃圾收集器来清理内存。如果您没有在C++中释放动态内存,它将被“泄漏”内存--也就是说,没有到内存的链接,并且在进程退出之前它永远不会被回收。
再次不要混合内存分配函数的对。
edt:不实现链接列表,使用标准模板库提供的容器。如果您觉得需要更好的性能,请使用boost中的侵入容器。
发布于 2010-03-03 16:08:58
您应该优先使用new和delete,而不是malloc()、/calloc()、/realloc()和free()。
如果要创建链接列表,也应该使用std:名单。,请查看std::向量
至于应用程序的内存使用情况:很可能在应用程序退出之前,内存不会返回到系统。
https://stackoverflow.com/questions/2372780
复制相似问题