Here is an example on SO
What i was referring to is std::shared_ptr. A SmartPointer is nothing more than a struct(record) which wraps some kind of pointer and does the lifetimehandling for you by doing actions when scopes are left or smartpointers are reassigned. The std::shared_ptr implements the same behavior we know from strings and interfaces in Delphi. Keeping a referencecounter on top of the allocated memory and freeing it, once the counter reaches zero. In C++ you wrap Interfaces into those, too, because the compiler does not call AddRef/Release automatically (the smartpointer does that for you). SO whenever an object is wrapped by a std::shared_ptr, you know you can safely keep the SharedPointer.
Previously, Delphi had no initialize/finalize and Assign operators on records(which are present in C++). Therefore it was impossible to write one(if you didn't want to wrap something in a wrapper TInterfacedObject, being much larger than a SmartPointer)