Essentially unique_ptr vs shared_ptr .
Single ownership, otherwise known as unique ownership, means that the resource belongs to an instance of one class. As soon as this instance ceases to exist, the resource is freed (via the destructor). Most of the RAII classes you find have a unique ownership, for example std::vector .
Co-ownership means that a resource is shared among multiple instances of a class. A resource is freed only after each instance ceases to exist and therefore requires some form of reference counting or garbage collection. An example of where you want to use shared ownership is a handle that is very expensive to copy an immutable resource. I saw that it is also used in graphs.
This can help think in terms of pointers. Only one ownership pointer will have one ownership, the common will have several. Of course, RAII may not include pointers.
+---------------+ |Shared instance| +--------+ +------------+--+ +---------------+ |Resource| | +----------+Shared instance| +--------+ vv +---------------+ ^ +--------+ | |Resource|<-----------+ | +--------+ +---+-----------+ | ^ |Shared instance| +------+--------+ | +---------------+ |Unique Instance| | +---------------+ | +------+--------+ |Shared instance| +---------------+
source share