Question: Most of my C++ programming experience has been projects for school. In that way, our usage of external libraries (ie boost) has been either prohibited or discouraged. Therefore we could not use smart pointers unless we wanted to write our own, which was usually beyond the scope of the projects. I'm just wondering in real world projects, how much memory management is actually done manually?

I guess this is sort of a vague question. I'm just wondering how memory management is usually done in real world projects.

Answer: 
Depends what you mean by "memory management".

Obviously, a strict definition means "all the time", since automatic variables (stack allocated) is a memory thing. You probably didn't intend that.

On the other side, there is raw `new` and `delete` usage. This *should* never happen, but probably happens in "common" C++ anyway. It's bad practice, sloppy, and easily solvable with containers. One can literally copy and paste a smart pointer implementation from somewhere and be done, no excuse.

In the middle, ideally all "management" is done automatically, with containers. The only management that might need to be done is breaking cyclic dependencies or making your own container classes. 

In my own projects, I only ever use `new` and `delete` when I'm making a utility class so I never have to `new` and `delete` again. After that, I only use `new` when it goes directly into some container.
It is also worth mentioning that shared\_ptr made it into the standard library in 2003 as std::tr1::shared\_ptr. Or at least, if it isn't officially in the library, it is shipping with all the C++ compilers I've used recently.