我听说Python有自动的“垃圾回收”,但C++没有。这是什么意思?

3 投票
6 回答
1878 浏览
提问于 2025-04-15 14:52

我听说Python有自动的“垃圾回收”,而C++没有。这是什么意思呢?

简单来说,垃圾回收就是一种管理内存的方式。当你在程序中创建一些东西,比如变量或对象,计算机会为它们分配内存。但是当这些东西不再需要时,内存就会被浪费掉。垃圾回收的作用就是自动清理这些不再使用的内存,避免浪费。

在Python中,这个过程是自动进行的,你不需要担心什么时候去清理这些不再用的东西,Python会自己处理好。而在C++中,你需要手动去管理这些内存,自己去释放那些不再需要的部分。如果你忘了释放,就会造成内存泄漏,影响程序的运行。

所以,Python让这部分变得简单了很多,而C++则需要程序员更加小心和负责。

6 个回答

4

来自维基百科 http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29:

...

垃圾回收让程序员不需要手动管理内存的分配和释放。因此,某些类型的错误被消除了或者大大减少了:

  • 悬空指针错误,这种错误发生在一块内存被释放后,还有指向它的指针存在,而这些指针被使用了。

  • 重复释放错误,这种错误发生在程序试图释放一块已经被释放的内存区域。

  • 某些类型的内存泄漏,指的是程序没有释放那些不再被任何变量引用的内存,随着时间的推移,会导致内存耗尽。

...

垃圾回收的基本原则是:

  1. 找到程序中那些将来无法访问的数据对象
  2. 回收这些对象所占用的资源
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”这个对象,不需要用户自己去管。

撰写回答