If you want a good guide on how to stuff up memory management, Apple paints a perfect Greek Tragedy
Most of the issues come from trying to simplify C++. People have this idea that C++ is the evil harsh language (I sadly know a lot of Java Programmers), and hence its memory management system is dastardly. The reason for this is because the whole Heap/Stack and Pointer/Object thing that confuses so many people. So languages make it simpler, by making everything harder and hence we get Heap & Object only which makes life a lot more painful. But it makes it harder for people to stuff up. So then people get the idea that C++ doesn't have "one way to rule them all" and hence they have to think and it gets complicated from there.
1 hand I like how in C++ I can choose how something lives and dies, and now in C++11+ I can chose to not care if I want to

Other hand, C# and I don't have to care at all and that is fine with me, mostly.
It all comes down to what you are trying to do and under what constraints you are trying to do it under. I have 16GB RAM so if my tiny application eats a few hundred KBs for 3 mins longer than it its needs too, I don't even notice. If I want some code to run on my A1000, they yes every byte lives and dies at the click of my finger, its the only way we survive.
I think Garbage Collection has a bad name. 1. Java used it, badly, and as the corporate world bought into the "Java makes coding faster" and applications moved to it, and this was back in the PIII days, GC would kill performance, gobble RAM and just make life miserable. 2.) Apple "its just better" used it ( they have recently banned it as of 2~3 OSX versions ago... ) and they did it badly, and hence Macs needed lots and lots of expensive RAM in order to do trivial things.
Some early parts of iOS were still using it internally, and that would suddenly cause your app to have a really long pause.. Sadly there was a watch dog timer and if your app didn't respond on the main thread for some amount of seconds, your app would get killed. So long task, then GC kicks in and BOOM crash... and people lost their work.. not fun.
Also GC on BASIC 2.0 on a C64 can be "fun and games", I think there was an sys you could call that would force collection, came in handy sometimes.
Basically Memory Management is the Captain America vs Iron Man Argument of the computing world.
Cap says Freedom for all aka manual memory management, do what you want.
Iron says We can't have liberty without restrictions and prevention is better, hence Garbage Collection and other 'helpers'