3 ms·
RAII doesn't save you from buffer overflows, or memory leaks when you need an object to live beyond the current scope. C arrays and pointers can still be used
by Skinney 13y ago
RAII doesn't save you from buffer overflows, or memory leaks when you need an object to live beyond the current scope.
C arrays and pointers can still be used on the stack, and are sometimes simply the right tool for the job.
While RAII greatly reduces memory leaks and enhances resource-management, it doesn't save you in all cases, which means there still is an overhead and you will still have to worry about it.
Java doesn't have Undefined Behaviour, buffer overflows, or memory leaks (not completely true, I'm not counting space leaks here but I hear it's possible to introduce a memory leak by writing a faulty class loader).
While C++ does provide idioms for writing safe code, C++ can't remove them, which means you will always have to worry about it. Sometimes the problem isn't actually your code, but the library you're using, which is the case at my job, which again made me miss a safer language :(
- eatitraw 13y ago> RAII doesn't save you from buffer overflows How do other languages solve this problem? > or memory leaks when you need an object to live beyond the current scope. Have you ever heard about smart pointers? They take most pain from dealing with pointers. Managing circular references remains a bit complex though.
- Skinney 13y ago> How do other languages solve this problem? Reading or writing past the allocated parts of a buffer is treated as a runtime error, wheras in C/C++ you just end up with corrupted memory. > Have you ever heard about smart pointers? Ahh, completely forgot about these. You're right, they're great.