this allows the C++ version to provide automatic lifecycle management for the play process, while both versions of the API (C and C++) impose only one level of indirection.