我听说Python有自动的“垃圾回收”,但C++没有。这是什么意思?
我听说Python有自动的“垃圾回收”,而C++没有。这是什么意思呢?
简单来说,垃圾回收就是一种管理内存的方式。当你在程序中创建一些东西,比如变量或对象,计算机会为它们分配内存。但是当这些东西不再需要时,内存就会被浪费掉。垃圾回收的作用就是自动清理这些不再使用的内存,避免浪费。
在Python中,这个过程是自动进行的,你不需要担心什么时候去清理这些不再用的东西,Python会自己处理好。而在C++中,你需要手动去管理这些内存,自己去释放那些不再需要的部分。如果你忘了释放,就会造成内存泄漏,影响程序的运行。
所以,Python让这部分变得简单了很多,而C++则需要程序员更加小心和负责。
6 个回答
4
来自维基百科 http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29:
...
垃圾回收让程序员不需要手动管理内存的分配和释放。因此,某些类型的错误被消除了或者大大减少了:
悬空指针错误,这种错误发生在一块内存被释放后,还有指向它的指针存在,而这些指针被使用了。
重复释放错误,这种错误发生在程序试图释放一块已经被释放的内存区域。
某些类型的内存泄漏,指的是程序没有释放那些不再被任何变量引用的内存,随着时间的推移,会导致内存耗尽。
...
垃圾回收的基本原则是:
- 找到程序中那些将来无法访问的数据对象
- 回收这些对象所占用的资源
12
试着去了解一下这个概念。
9
这意味着,使用Python的用户不需要像在C/C++中那样去手动清理自己创建的动态对象。
C++中的例子:
char *ch = new char[100];
ch[0]='a';
ch[1]='b';
//....
// somewhere else in your program you need to release the alocated memory.
delete [] ch;
// use *delete ch;* if you've initialized *ch with new char;
在Python中:
def fun():
a=[1, 2] #dynamic allocation
a.append(3)
return a[0]
Python会自动处理“a”这个对象,不需要用户自己去管。