I have a resource_manager class which maintains a std::vector internally. resource_manager i
Perhaps declare shared_ptr as a friend? shared_ptr doesn't call the constructor, and should only destruct if your resource manager releases the pointer before all clients have destroyed their shared_ptrs. This won't allow clients to break the protection, but will allow clients to keep a resource alive against the resource_manager's "will."