Yasper (Yet Another Smart Pointer) is a sweet and simple single-header smart pointer for C++.
Why write another C++ smart pointer?
There are two high quality libraries that include smart pointers: Loki and Boost. Alexandrescu's Loki SmartPtr is customizable to a fault. I find policy templates unspeakably ugly and don't need the extra options. Boost's shared_ptr is quite nice, but is too restrictive and introduces undesirable dependency on the massive Boost library. What I need is a small, simple smart pointer: yasper.
small (contained in single header)
simple (nothing fancy in the code, easy to understand)
maximum compatibility (drop in replacement for dumb pointers)
The last point can be dangerous, since yasper permits risky (yet useful) actions (such as assignment to raw pointers and manual release) disallowed by other implementations. Be careful, only use those features if you know what you're doing!