Personally i haven't put destructors in my singletons unless i am using a template singleton class, but then i make them protected.
template<class T>
class Singleton
{
public:
static T &GetInstance( void )
{
static T obj;
return obj;
}
static T *GetInstancePtr( void )
{
return &(GetInstance());
}
protected:
virtual ~Singleton(){};
Singleton(){};
};
then write my class as
class LogWriter : public Singleton<LogWriter>
{
friend class Singleton<LogWriter>;
}