Original Post
It's going to be used to encapsulate DirectAudio - it seems a singleton is appropriate (but I don't want a discussion over that here). So is this very basic version valid... I can see problems with security here - when you call GetObject() you can call delete on the result which would screw things up. What should be changed in my class?
class DirectAudio
{
private:
IDirectMusicPerformance8 *mPerformance;
IDirectMusicLoader8 *mLoader;
static DirectAudio *mActiveObject; //There can be only one
static unsigned mCount; //reference counting
DirectAudio() : mPerformance(0), mLoader(0)
{
CoInitialize(NULL);
}
public:
~DirectAudio()
{
CoUninitialize();
}
DirectAudio *GetObject()
{
if(!mActiveObject)mActiveObject=new DirectAudio;
++mCount;
return mActiveObject;
}
void Release()
{
if(!(--mCount))delete mActiveObject;
}
};
DirectAudio *DirectAudio::mActiveObject = 0;
unsigned DirectAudio::mCount = 0;