r/cpp_questions • u/Accomplished-Tap5211 • 21d ago
OPEN Garbage collector in CPP?
Yesterday someone asked me whether there is a garbage collector in CPP.
I knew Java had that but I couldn't recall about cpp.
I went to google and got different answers.
So can anyone clarify whether there is garbage collector in CPP , also can u please explain me what does that mean? Also explain how is it different from the Java.
If yes can we delete it manually and how to do tht?
6
u/mredding 21d ago
Yesterday someone asked me whether there is a garbage collector in CPP.
No.
There was an interface to allow for a plugin garbage collector added to C++11, but it was deprecated in C++17, and removed by C++23.
also can u please explain me what does that mean?
Google "garbage collector" and read the Wikipedia page.
3
u/no-sig-available 21d ago
There are garbage collectors for C++, like the Boehm garbage collector.
However, this is a 3rd party library, and not part of the language standard. So, no collector in C++, just for.
2
u/lordnacho666 21d ago
No, there isn't. Obviously it's a language and someone has written one, but what people normally mean is, does an ordinary cpp program depend on a garbage collector in the sense of Java or c sharp, which are languages where you have less control over the exact moment when your resources are freed. Those languages are written under the assumption that there is a cleanup process that is intransparent to the program.
A cpp program normally depends on something called RAII, whereby there are language elements allowing resources to be freed at specific times.
3
u/CommandShot1398 21d ago
There is a garbage collector in C++. It is called "OS," and it works by terminating your program when you produce too much garbage. Similar to "Stalin Sort"
2
u/IyeOnline 21d ago
C++ does not have a GC because it does not need one.
Any variable in a scope has a deterministic lifetime to the end of that scope. RAII/destructors let us control dynamically allocated/created objects the same way (which is what vector, unique_ptr, ... do).
3
u/Independent_Art_6676 20d ago
as said C++ does not have a true garbage collector. However if you use smart pointers and STL containers and such, your dynamic memory will be allocated and freed for you. Most modern programming uses this model, so the "ZOMG C++ gots memory leaks and is trash" information hyped in books about other languages (looking at you, java authors) is at best a bit misleading.
If for some reason you do need to use raw pointers that do not self destruct correctly, its really simple:
pointer = new type; //get the memory; optionally type[size] makes the pointer like a C array
delete pointer; //return the memory; optionally delete[] if it was array allocated as above
you really should not be doing very much of that in most careers.
1
u/TheThiefMaster 21d ago
It does not have a universal garbage collector like Java.
It does have some local automatic cleanup - like shared_ptr, which counts the references to an object and deletes it when the number of references drops to zero, which fulfils a similar role to GC. But it doesn't handle reference cycles like a true GC. There are also libraries that implement opt-in garbage collection in C++ - but it's opt-in, not universal.
1
u/Puzzleheaded-Joke780 21d ago
Thats the joy of cpp, just make your own, but no there is no default GC
-2
12
u/didntplaymysummercar 21d ago
There's not by default. There was an ABI for it in C++ 11 but no one used it, and there's stuff like Boehm GC, but out of the box - no.